質問するログイン新規登録

Q&A

解決済

1回答

288閲覧

pythonで経路を同じ長さにするプログラムを作成するための情報を入手したい

crapemyrtle

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2025/12/09 11:13

1

0

実現したいこと

現在pythonを使用して、添付の画像のような複雑な経路を求めようとしています。
経路を作成する際の条件は以下の通りです。

イメージ説明

〈条件〉
・START位置とGOAL位置の座標は決まっている
・2つ経路を作成する場合、2つの経路の長さが同じになるようにしたい
・経路同士が交差してはならない
・経路同士は1mm以上間隔を空けなければならない
・上記の条件を満たせば、どのような経路を通っても良いものとする。(最短でなくても良い)

発生している問題・分からないこと

上記のようなプログラムをpythonで実現したいのですが、どのようなアルゴリズムを使用すれば実現できるのかが分かりません。
pythonで実現可能なのであれば、どのようなサイトが参考になるか、どのようなアルゴリズムを使用すれば良いか等の情報を教えていただきたいです。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

いろいろと調べたりしましたが、似たような事例を見つけられず、アルゴリズム等にも詳しくないので、まずどのようなアルゴリズムを使用すれば良いか調べてもよく分かりませんでした。
知識不足で申し訳ありませんが、もし何か情報をお持ちの方がいたらぜひご享受いただきたいです。
よろしくお願いいたします。

補足

特になし

TakaiY👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

meg_

2025/12/09 17:33

> 複雑な経路を求めよう と > 〈条件〉 の関係性が分からないのですがどう関連しているのでしょうか? > pythonで実現可能なのであれば 答えの導出はできるがPythonで書けないという課題でしょうか?
crapemyrtle

2025/12/10 01:28

説明が分かりづらく申し訳ありません。 >> 複雑な経路を求めよう と > 〈条件〉 の関係性が分からないのですがどう関連しているのでしょうか? 画像は例がある方がイメージしやすいかと思い載せたもので、基本的には<条件>を満たす経路を作成したいというのが目的となります。 画像に示した複雑な経路(緑線)は、〈条件〉を満たしている経路の一例となります。(経路の数が異なる、都合上一部カットしている等で分かりづらくなっており申し訳ございません) > pythonで実現可能なのであれば 答えの導出はできるがPythonで書けないという課題でしょうか? いえ、そもそも画像で示した経路は手作業(ツール)で作成したものであり、関数やアルゴリズム等を用いている訳ではありません。 そのため答えの導出等もできていない状況で、アルゴリズム等もどのようなものを使用すれば<条件>を満たせるのか調べても分からなかったため、こちらで質問させていただきました。 申し訳ありませんがよろしくお願いいたします。
fana

2025/12/10 03:19

特定の言語を用いた具体実装の話でないならば,質問につけるタグを python とかに限定しないほうが質問が人目に付きやすい可能性 (…とか思ったけど,例えば「アルゴリズム」とかにしたところでマイナーすぎて微妙かな?)
crapemyrtle

2025/12/10 03:52

自分がpythonくらいしか触っておらず、他の言語での実装が自信がなかったので、今回はpythonでタグ付けさせていただきました。 もし何かプログラムを例示してくださる方がいればと思い。。 確かにもう少し分かりやすいタグを設定するべきでしたね。 アドバイスいただきありがとうございます。
guest

回答1

0

ベストアンサー

質問文を読んでの単なる思い付きですが……

まず START と GOAL を結ぶ経路 p( x ) を何かしら乱数などを用いて生成する手段を用意する.
ここで x は経路の形状を決めるパラメタ群である.
(例えば,経路がいくつかの点群を結ぶ折れ線だとか,点群を制御点とするパラメトリック曲線だとかであれば, x は点群の座標になる)

つぎに,既存の経路 p( x ) を,特定の長さになるように変形させる手段を用意する.
(条件を満たすように x を更新する最適化問題みたいなものになるか)

上記が用意できたならば,あとは

  1. まず経路を1つ適当に作る
  2. 経路をもう一つ作り,長さが1個目の経路と同じになるように変形させる
  3. 交差とか「1mm~」の条件を満たしているかをチェック.ダメなら 1. or 2. かららやり直し

という,てきとーすぎる処理をぶん回す.

(もちろん,2.の変形の処理において,交差などの条件も入れ込んで最適化することも考えられるが,難易度の面とかで,ぶん回すほうが楽かな,と)

投稿2025/12/10 01:41

編集2025/12/10 01:43
fana

総合スコア12318

crapemyrtle

2025/12/10 02:27

なるほど、具体的にイメージを記述していただきありがとうございます! そのような処理を実行できるプログラムをpythonで作成すれば良いのですね。 一度実現できるか自分で作成して試してみたいと思います。 またプログラム作成時に不明点が出てきたらteratailで再度質問させていただこうと思います。 ご丁寧にありがとうございました!
fana

2025/12/10 03:12 編集

そんなスピーディに質問を閉じなくてもよいのでは(もうちょっとほかの話が出てこないか待てばいいのに感). 経路の表現次第では「経路の長さ」を求めること自体の難易度が問題になりそうな気もするので,最初はそのへんに苦労しないような経路の表現を用いてやってみるのが良いのかな? とか思う. 「ぶん回す」がなかなかうまくいかない場合には 例えば 【START と GOAL の2点を通る直線で世界を2分割し,両方の側に経路を1つずつ生成した状態から開始】 とかすれば,「交差しない」とか「1mm~」の条件を満たしやすいかもしれない. (ただし,そういうことをすると得られる結果が似たり寄ったりになりそうだけど)
crapemyrtle

2025/12/10 05:31

申し訳ありません、teratailではあまり多くの回答が来るイメージではないことと、一度自分の方でもプログラムを作成してから再度質問した方が良いと思い一度閉じさせていただきました。 いただいた回答で自分の方でも少しイメージができそうだったので。。 アドバイスいただきありがとうございます。 >経路の表現次第では「経路の長さ」を求めること自体の難易度が問題になりそうな気もするので,最初はそのへんに苦労しないような経路の表現を用いてやってみるのが良いのかな? とか思う. なるほど、まず経路の表現を工夫する必要があるということですね。 ありがとうございます。 >「ぶん回す」がなかなかうまくいかない場合には 例えば 【START と GOAL の2点を通る直線で世界を2分割し,両方の側に経路を1つずつ生成した状態から開始】 とかすれば,「交差しない」とか「1mm~」の条件を満たしやすいかもしれない. (ただし,そういうことをすると得られる結果が似たり寄ったりになりそうだけど) こちらもぜひ参考にさせていただきます。 プログラムを一度作成してみてまたうまくいかない点があったら再度質問を投稿させていただきますね。 ご丁寧にありがとうございます。
fana

2025/12/10 07:29

> プログラムを一度作成してみてまたうまくいかない点があったら再度質問を投稿させていただきますね。 あなたの今後の検討が うまくいった 場合には 可能であればその方法の話をここに自己回答の形とかで教えていただきたく. (これ系の話は「こうやったら→こうなったよ」っていうのを知りたいので)
fana

2025/12/10 07:37

条件を満たすことが自明な「複雑でない」経路ペアであればなにかしら用意することは簡単だと思うので, そこを出発点にして(常に条件を満たす範囲で)変形させていく的な方向のやり方とかもあるかもしれませんね. (最も単純な形状から再分割を繰り返していくみたいな感じ?)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問