• 締切済み

2線分の最短距離

2線分の最短距離を求める方法はありませんか? ぐぐっても見ましたが点と線ばかりでした。

みんなの回答

  • info22
  • ベストアンサー率55% (2225/4034)
回答No.5

#1,#2,#4です。 >2次元の2つの線分の最短距離についてです。 2つの線分をAB,CDとすると、 最短距離は以下の手順で4つの候補を求め、その中の最小の長さが求める最短距離になります。 その中で、点と直線の距離(垂線の長さ)の公式、2点間の距離の公式、直線上の点が直線上の線分の範囲内にあるか、無いかの判別式を使います。 (1)端点Cから線分ABまたはその延長線に垂線CHを下ろして垂線の足Hが線分AB上にあればCDを候補とします。Hが線分AB上になければCAとCBの短い方の長さを候補とします。 (2)端点Dから線分ABまたはその延長線に垂線DKを下ろして垂線の足Kが線分AB上にあればDKを候補とします。Kが線分AB上になければDAとDBの短い方の長さを候補とします。 (3)端点Aから線分CDまたはその延長線に垂線AMを下ろして垂線の足Mが線分CD上にあればAMを候補とします。Mが線分CD上になければACとADの短い方の長さを候補とします。 (4)端点Bから線分CDまたはその延長線に垂線BNを下ろして垂線の足Nが線分CD上にあればBNを候補とします。Nが線分CD上になければBCとBDの短い方の長さを候補とします。 (5)(1)~(4)の候補の内、最小の長さの線分を2つの線分ABとCDの間の最小距離とする。

  • info22
  • ベストアンサー率55% (2225/4034)
回答No.4

#1,#2です。 A#2は三次元の2直線間の(最短)距離を対象とした回答です。 質問が2次元で、2線分間の距離の場合なら、補足でそのようにお書き下さい。 また三次元空間における2線分間の距離の場合も。補足にその様にお書き下さい。 この場合、直線間の最短距離の点が線分上にない場合は、最短点に最も近い線分の端点からの距離が最短になりますが、最短点がどちらの線分上の外に出てしまうか、あるいは、どちらの線分上にもない場合は、端点間の距離を比較して線分上の最短となる端点を選びます。 質問の内容が2次元か3次元か、線分の位置関係によって条件が変わってきますので、質問の問題をはっきり書いて、問題が不明確にならないようにして下さい。

mapu-go
質問者

補足

書き方が悪かったようですみません。 シューティングのレーザーorビーム類の当たり判定に使いたいと思っていますので、 2次元の2つの線分の最短距離についてです。 しかし後々3次元にも拡張したいと思っています 当たり判定用なので、線分同士の位置関係がどのようになるかは解りません。

  • rnakamra
  • ベストアンサー率59% (761/1282)
回答No.3

あなたがお聞きしたいのは2"線分"の最短距離ですか。 それとも2"直線"の最短距離ですか。 2"直線"の最短距離であれば#2での回答に従えばもとめることができます。 2"線分"の最短距離であれば場合わけが必要になります。

mapu-go
質問者

補足

お早い解答ありがとうございます。 おっしゃるとおり2"線分"です。 他の方も誤解があるようですみません。

  • info22
  • ベストアンサー率55% (2225/4034)
回答No.2

#1です。 補足です。 過去に私が解答したQA qa4673776.html また参考となるURLがありますので挙げておきます。 http://ahirujigen.hp.infoseek.co.jp/coding002.html

  • info22
  • ベストアンサー率55% (2225/4034)
回答No.1

>点と線ばかりでした。 それが分かれば、その点をもう一本の直線に代入して、距離が最小になる点の座標を求めれば良いだけです。 あるいは、それぞれの直線の法線が一致する条件から、最短となる直線上のそれぞれの点が決定できますので、その2点間の距離を計算すれば良いでしょう。 一般論で考えるのではなく、具体的な2本の直線の式を与えてやってみたらどうでしょう。

関連するQ&A

  • 2線分の最短距離。

    X、Y座標系で2線分の最短距離を測りたいのですが、お互いの端点から相手線分へ下ろした垂線の長さが最小となるものでよいのでしょうか?

  • 任意の点と任意の線分との最短距離となる点

    現在C++でシューテイングゲームを作成しています。 当たり判定の計算として二次元座標の三点で判定を取れないかと考えて詰まっています。 具体的には任意の点Pと任意の点ABからなる線分の最短距離を算出したいのですが、これは可能なのでしょうか

  • ★点と線分の距離??★

    いつもお世話になっています。 プログラミングで困っています。どなたか基本的な数学からご教授ください。 (1)線分ABに対して点Pから垂線を下ろすことが出来るかどうかの判定をするには? (2)垂線と線分との交点の座標を求めるには? (3)垂線と線分の交点の距離を求めるには これらの処理を出来るだけ早く処理したいのです。 あと、確認なのですが 「線分に垂線を下ろすことができるのであれば、その交点が点に最も近い」 でいいのですよね。 よろしくお願いします。

  • 2つの線分の最短距離

    2つの線分の衝突判定をして、そこから色々な形の当たり判定を作っていこうと思っているのですが・・・ 3次元上で、タイトルのものをどう計算して出したらいいのか分かりません。 本もいくつか読んでみましたが、数式しか載っていなくて、プログラムでどう表現したらいいのか・・・ ご教授願います。

  • 2つの放物線間の最短距離

    2つの放物線間の最短距離をラグランジュの未定乗数法を用いて求める方法を教えていただけないでしょうか. 2つの式はそれぞれ y=x^2・・・(1) y=-3(x-1)^2・・・(2) です. 個人的には 式(2)上の1点を(a,b)と置く. 式(1)上の任意の一点(x,y)との距離を√(x-a)^2+(x-b)^2 と表す. f(x,y)=√(x-a)^2+(x-b)^2 g(x,y)=y-x^2=0 と置き,ラグランジュの未定乗数法を用いて(a,b)でのf(x,y)の最小値を出す. aについての増減表を書いて最短距離と放物線上の2点を求める. という方法で求められるのではないかと思ったのですが,最小値を求めることができませんでした. 図書館などで微積分の演習書を全部調べましたが同じような問題を見つけることができず,困っています. 宜しくお願いします.

  • 「最短距離」の接触判定

    1.マウスポインタの左ドラッグ中には、通った軌跡をサンプリングし、Flagを1にして座標(x,y)を「Point」という変数に記録(x[Point],y[Point],Flag[Point]=1)していくとともに、隣り合う座標点を結んで線を描く。 2.マウスポインタの右ドラッグ中に、指定した範囲周辺(例えば50*50[mm]以内)にサンプリングされた座標点が入ったら「接触」と判定する。 3.この際、複数の座標が範囲内に含まれている場合は、マウスポインタの中心から最短距離にある座標点を「接触点」とする。 4.接触点に対してアクションを起こす(例えば、移動させる、線の色や太さを変える、など)。 このようなプログラムにおいて、「最短距離にある座標点」の検出をどのように記述すればいいでしょうか。 接触判定、最短距離の接触点の検出、描線の開始・終了点の検出、アクション、という順番に記述しようと思うのですが、 【接触判定】 マウスポインタの位置と各Pointとの距離の絶対値をfor文で調べ、指定範囲内に収まっているものがあれば接触と判定。 【最短距離の接触点の検出】 ? 【描線の開始・終了点の検出】 最短距離の接触点から描画開始・終了方向にそれぞれシーケンシャルサーチして、Flagが1から0になるところの点をそれぞれ開始点・終了点とする。 【アクション】 開始点~終了点までの各Pointにアクションを起こす。 このような流れです。具体的にどのように最短距離の検出を書けばいいか、ご指導いただけませんでしょうか。使用ソフトはC++Builder4です。

  • 平面と点の最短距離

    ある平面と点の最短距離を計算するプログラムを作成したいのですが、計算方法がわかりません。 平面はXYZを持った4点で定義されており大体長方形になっています。 最短距離は、この長方形の範囲内にぶつけるような形で求める必要があります。 数学の知識に乏しい為、なるべく簡単な方法を教えて頂けると助かります。 宜しくお願い致します。

  • 最短距離の問題です

    最短距離の問題です 座標空間において,x, y, z 座標の少なくとも1つが整数であるような点の集合 A を考える. (0,0,0) から (3,3,3) まで,A に属する点だけを通って移動する 最短経路の長さを求めよ. 答えは√41 です

  • 最短距離

    点Aから点Gまでの最短距離を求めなさいという問題が出されましたが、 私の答えが√146になりました。 添削お願いできませんか? 展開図を書いて求めました。 *ちなみに、DH(高さ)=3cm,HG(縦)=8cm,FG(横)=5cmです。

  • 最短距離

     ナビは最短距離や時間の最短を調べて目的地までの時間や距離を計算します。ネットのサイトでそのコースが分かるものはあるのでしょうか?