• ベストアンサー

★点と線分の距離??★

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.7

N03,6です。 >結果(x,y)は >x = ((p2-a2)(a2-b2)(a1-b1)-p1(a1-b1)^2+a1(a2-b2)^2)/((a1-b1)^2-(a2-b2)^2) >y = ((p1-a1)(a1-b1)(a2-b2)-p2(a2-b2)^2+a2(a1-b1)^2)/((a2-b2)^2-(a1-b1)^2) yを消去したあと符号が間違っていませんか。 答えは x = ((p2-a2)(a2-b2)(a1-b1)+p1(a1-b1)^2-a1(a2-b2)^2)/((a1-b1)^2+(a2-b2)^2) y = ((p1-a1)(a1-b1)(a2-b2)+p2(a2-b2)^2-a2(a1-b1)^2)/((a2-b2)^2+(a1-b1)^2) となると思います。

その他の回答 (6)

回答No.6

No3の訂正です。 >垂線の方程式は (y-p2)(a2-b2)+(x-p1)(a1-b1) =0 >ABをとおる直線の方程式は (y-a2)(a1-b1)-(x-a1)(a2-b2) =0 =0がぬけていました。 連立方程式を解くコツというほどでは、ありませんが 垂線の方程式を(a1-b1)倍して ABの方程式を(a2-b2)倍して yの係数を合わせてyを消してxを求める方法が途中で分数形式にならないので計算しやすいのではないでしょうか。 また、xが求まればyはxを垂線の方程式等に代入するのではなく、求めたxの式の中のa1,a2等の1と2を全て入れ替えればyが求まります。

kiku_kiku
質問者

お礼

回答ありがとうございます。 連立方程式の解き方はこのような感じでよろしいでしょうか? (y-p2)(a2-b2)+(x-p1)(a1-b1) =0 (y-a2)(a1-b1)-(x-a1)(a2-b2) =0 (y-p2)(a2-b2)(a1-b1)+(x-p1)(a1-b1)(a1-b1) =0 (y-a2)(a1-b1)(a2-b2)-(x-a1)(a2-b2)(a2-b2) =0 y(a2-b2)(a1-b1)-p2(a2-b2)(a1-b1)+(x-p1)(a1-b1)(a1-b1) =0 y(a2-b2)(a1-b1)-a2(a1-b1)(a2-b2)-(x-a1)(a2-b2)(a2-b2) =0 p2(a2-b2)(a1-b1)+(x-p1)(a1-b1)(a1-b1) = a2(a1-b1)(a2-b2)-(x-a1)(a2-b2)(a2-b2) (p2-a2)(a2-b2)(a1-b1) = (x-p1)(a1-b1)^2 -(x-a1)(a2-b2)^2 (p2-a2)(a2-b2)(a1-b1) = x(a1-b1)^2-x(a2-b2)^2-p1(a1-b1)^2+a1(a2-b2)^2 (p2-a2)(a2-b2)(a1-b1) = x((a1-b1)^2-(a2-b2)^2)-p1(a1-b1)^2+a1(a2-b2)^2 x((a1-b1)^2-(a2-b2)^2) = (p2-a2)(a2-b2)(a1-b1)-p1(a1-b1)^2+a1(a2-b2)^2 結果(x,y)は x = ((p2-a2)(a2-b2)(a1-b1)-p1(a1-b1)^2+a1(a2-b2)^2)/((a1-b1)^2-(a2-b2)^2) y = ((p1-a1)(a1-b1)(a2-b2)-p2(a2-b2)^2+a2(a1-b1)^2)/((a2-b2)^2-(a1-b1)^2) 結果が合わないような気がするのですが。。

noname#5537
noname#5537
回答No.5

#4 の訂正です。 誤) (1) は (p - a)・(b - a) > 0 かつ (p - a)・(a - b) > 0 なら,H は線分 AB 上にある, 正) (1) は (p - a)・(b - a) > 0 かつ (p - b)・(a - b) > 0 なら,H は線分 AB 上にある,

noname#5537
noname#5537
回答No.4

ベクトルを使って考えてみます。 図を書きながら読んで下さい。 A, B,P の位置ベクトルをそれぞれ a, b, p とします。 P から直線 AB に下した垂線の足を H とし,その位置ベクトルを h とします。 A から B に向かう単位ベクトルを c とすると,  c = (b - a)/|b - a| です。 H は直線 AB 上にあるので,  h = a + t c で表されます。t はスカラーの定数です。 垂線 PH と直線 AB は直交するので,  (h - p)・c = 0 (・は内積を表しています) です。これから,  (a + t c - p)・c = 0  t = (p - a)・c というふうに t が求まります。 (1) 0 ≦ t ≦ |b - a| ならば,H は線分 AB 上にあります。 (2) h = a + t c から H の座標が求まります。 (3) |p - h| から垂線の長さが求まります。 以上を素直にプログラムしても出来ますが,速度的には「?」です。 手計算でベクトルを使わない表現に直してしまったほうがいい-かも-しれません。 # そうすると結局,垂線の方程式と直線の方程式から連立に解いた場合と同じ結果になりますが。 # (1) は (p - a)・(b - a) > 0 かつ (p - a)・(a - b) > 0 なら,H は線分 AB 上にある, # としてもいいです。(成分で計算すると,yuusukekyouju さんのと同じになると思います)

回答No.3

>線分ABに対して点Pから垂線を下ろすことが出来るかどうかの判定をするには? A(a1,a2) B(b1,b2) P(p1,p2)とおいたとき [(a2-p2)(a2-b2)+(a1-p1)(a1-b1)][(b2-p2)(a2-b2)+(b1-p1)(a1-b1)]≦0 の時垂線を引けます。0の時は垂線がAまたはBにきます。 >垂線と線分との交点の座標を求めるには? 垂線の方程式は (y-p2)(a2-b2)+(x-p1)(a1-b1) ABをとおる直線の方程式は (y-a2)(a1-b1)-(x-a1)(a2-b2) これを連立して解いてください。 >垂線と線分の交点の距離を求めるには 上記よりxy座標がもとまるのでもとめてください。 >「線分に垂線を下ろすことができるのであれば、その交点が点に最も近い」 はい、そのとおりです。

kiku_kiku
質問者

お礼

分りやすい回答ありがとうございます。 >これを連立して解いてください。 プログラムにするとすごく長くなるのですが、この連立方程式を解くのに何かこつみたいなのがありますか?

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

式やズバリの回答を書くのもアレなので、考え方のヒントです。 (あくまでも私だったら…という方法です。他のもっと処理が早い方法もあると思います。) │   P │ │    B │ A │ ┼──────── ABPを平行移動して、Aを原点に持ってくる。 │ │  P' │ │   B' │A' ┼──────── A'B'とx軸のなす角θだけ回転する。 B'がx軸の上に来てB''になる。 │ │ │   P'' │    │A'   B'' ┼──────── Pのx座標が[0~Bのx座標]ならば、交点を持つ。(1) 距離はP''のy座標の絶対値。(3) この図での交点の座標はQ(P''のx, 0)なので、元の図での交点を求めるために、Qを逆回転、逆平行移動を行う。(2) -- ポイントは回転角の求め方と回転の変換かな? データの型を上手く定義すると綺麗に書けるかも。

kiku_kiku
質問者

お礼

大体はイメージできるのですが、私の頭では数式にあらわすこともできず。。ましてやプログラムにすることも出来ないようです。。(ーー;) 回答ありがとうございました。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

以下の点を補足してみてください。 2次元平面で考えるか、3次元空間で考えるか? (ヒントを書き込む際のモチベーションにかなり影響します。) > 線分AB A点B点の座標が分かっている線分という事?

kiku_kiku
質問者

補足

あっごめんなさい。平面です 線分ABそれぞれの座標や点Pの座標は分っています。

関連するQ&A

  • ある点からある直線へ降ろした垂線の交点

    3次元空間において、3点A,B,Pがあったとします。 A,B,Pの座標はそれぞれ既知で、A(xa,ya,za) B(xb,yb,zb) P(xp,yp,zp)と表わされる時に、 (1)線分ABに対して点Pから垂線を下ろすことが出来るかどうかの判定をするには? (2)垂線と線分との交点の座標を求めるには? 以上の2つのことを行いたいのです。 数学的知識に乏しいため、自力ではなかなか答えに辿り着くことが出来ません。 よろしくお願いします。

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

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

  • 点が線分上にある条件について

    数学がとても苦手なのです。基本的な問題で申し訳ありません。 同一平面上で、ある点P(PX,PY)が、点A(AX,AY),点B(BX,BY)を結んだ線分AB上に存在する場合、点Pの座標が満たすべき条件を教えてください。 なんとなくは分かるのですが、シンプルに考えることができず、頭の中がごちゃごちゃになってしまいます。

  • 2線分の最短距離。

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

  • 数学Iの問題です

    1次関数 y=1/2x + 4 のグラフとx軸との交点をA、 y軸との交点をBとする。 線分AB上に点PをとってPからx軸に垂線をひき、 x軸との交点をQとする。 四角形BOQPの面積が6になるときの、 点Pの座標を求めよ。 この問題の回答に、 「点Pが線分AB上にあるための条件は 0<x<8 」 と書いてありました。 なぜ、0と8を含まないかを教えてください。 自分で考えたのは、「図形の面積が0になってしまうから」と 「四角形でなくなるから」ですが、 違う問題では面積が0になる値も範囲に含んでいたので 違う理由なのかと思いました。 「線分AB上」というのは、点A。点B上は含まないのでしょうか。 理由がよくわからないので教えてください。 画像添付しました。

  • 2つの線分に垂直な線分の交点

    2次元平面に点P(x0,y0)、点A(x1,y1)、点B(x2,y2)があり、 点Aを通る線分PAに垂直な線分と 点Bを通る線分PBに垂直な線分の交点の 求め方を教えて下さい。 垂直ベクトルを求め、任意に座標を決めて 連立方程式を解くやり方だと上手くいかない時が あります。シンプルに求める方法がありましたら 教えて下さい。

  • 中学数学の図形の問題です。

    数学の図形の問題がわかりません。教えてください。よろしくお願いいたします。 図のようにAB=6cm、BC=9cmの長方形ABCDがある。辺ADの上側に点Eを、AB=AE、AD=DEとなるようにとる。また、点Eから辺ADにひいた垂線と辺ADとの交点をFとし、点Dから線分AEにひいた垂線と線分AEとの交点をGとする。点Hは線分CEと辺ADとの交点である。 このとき次の問いに答えなさい。 ・点Eと直線CDとの距離を求めなさい。 ・線分DHの長さは線分FHの長さの何倍か求めなさい。

  • 違いを教えて下さい。<点と直線の距離公式>

    座標平面軸上に点A(4,0)と方程式y=2xで表される直線lをとる。 点Pのの座標を(a,b)とし、Pからlに引いた垂線とlの交点をQとおくと、 Qのy座標は2a+4b/5である。 点Pが条件『Pから直線lまでの距離とPAの比が1:√5である』を満たしながら 動くとき、Pの方程式をもとめよ。 という問題で、 (Pとlの距離)=|2a-b|/√{2^2+(-1^2)}=|2a-b|/√5 PA=√{(a-4)^2+b^2} |2a-b|/√5:√{(a-4)^2+b^2}=1:√5 |2a-b|=√{(a-4)^2+b^2} この両辺を平方・整理して、 4ab=3a^2+8a-16 ここの部分なのですが、絶対値をはずすのに平方しなくてはならないのですか? 例えば、 点A(5,4)とx+3y+3=0の距離 距離=|1×5+3×4+3|/√(1^2+3^2)=2√10 と求めますよね。 でもこれは絶対値をはずすのに平方してませんよね? 点と直線の距離公式の絶対値部分をを平方してはずすときと、 そうでないときの違いは何なのでしょうか?

  • 3次元空間内での線分の交差判定について

    はじめまして。 3D関係のプログラムを組む上で、線分同士の判定を行う必要があるのですが 数学の知識が乏しく困っています。 3次元空間内の線分ABとCDが交差しているか判定し、 交差していればその交点を求めたいのです。 2次元の場合はできたのですが、3次元になるとどうやって計算すればよいのか わかりません。(交差以外に、ねじれの位置関係があるんですよね?) どなたか教えていただけると助かります。

  • 線分の外分

    線分AB(長さは8)を3:1に外分する点Pを図に記入せよ。 解答  線分ABを3:1に外分する点Pは、線分ABをBの方向に延長した線上にあり AP:PB=3:1 このとき、AB=8とすると BP=8×1/3-1=4 質問 「BP=8×1/3-1」をどのようにして導いているのか分かりません(特に「3-1」は何を表わしているのかが分からない。)ので詳しく教えてください。