• ベストアンサー

交差する2線分の交点座標の求め方

2つの線分が交差する場に交点の座標を求めようと思っています。 アドバイスを頂けないでしょうか? 入力値:(aX1, aY1)(aX2, aY2)     (bX1, bY1)(bX2, bY2) 出力値:(X, Y) よろしくお願いします。

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

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

点(aX1, aY1)と点(aX2, aY2)を通る直線の方程式Aと、 点(bX1, bY1)と点(bX2, bY2)を通る直線の方程式Bを求める。 方程式Aと方程式Bを連立方程式として解き2つの直線の交点(X,Y)を求める。 ここまで、ただの数学問題ですね。 これで(X,Y)が入力の4つの点の座標で表現できたはずなので そのままプログラムに書けばよいです。 質問文では直線ではなく線分の交点なので、 線分が交わらないことも検出したいならそのロジックも入れましょう。 (求めた交点(X,Y)が2つの線分上にあるかチェックする。)

men_tan
質問者

お礼

説明いただいたように公式を作って 座標を求めることが出来ました。 ありがとうございました。

関連するQ&A

  • 座標A(X,Y)の線分(aX,aY)(bX,bY)に対称な座標の求め方

    VBで図形を入力した線分に対称に反転した図形と書こうとしています。 その為に必要な座標A(X,Y)の線分(aX,aY)(bX,bY)に対称な 座標B(X',Y')の求め方についてご教授お願いいたします。

  • 線分と線分が交わる条件を簡単に求める方法ってないでしょうか?

    線分と線分が交わる条件を簡単に求める方法ってないでしょうか? 線分が2つ(8つの値)があります (ax1,ay1)-(ax2,ay2) (bx1,by1)-(bx1,by1) この8つの値の大小関係だけで交差するかどうかの判定って 可能でしょうか? 直線の式y = ax + bを2つをわりだし その解がそれぞれの線分の範囲内にあるかで求めていたのですが 線分の数が多いためパフォーマンスに影響がでてきてしまいました。 (C言語で計算させています。) 数学は苦手なので、困っております。 或いは良い案があればお願いします

  • 2線の交点を座標値で求める式で、0での除算が発生しない方法を教えて下さい。

    2線の交点を座標値で求める式で、0での除算が発生しない方法を教えて下さい。 座標 線a ax1 = 0 , ay1 = 0 : ax2 = 12 , ay2 = 13 線b bx1 = 6 , by1 = 15: bx2 = 6 , by2 = 2 A=(y13-y0)/(x12-x0) B=(y2-y15)/(x6-x6) 0で除算が発生 X=(A*x0-y0-B*x2+y15)/(A-B) Y={A*y15-B*Y0+AB*(x0-x2)}/(A-B) 片方の線が垂直だと0で除算が発生してしまいます。

  • 線分と円が交差する条件

    線分と円(6つの値)があります 線分:(ax1,ay1)-(ax2,ay2) 円:中心(x1,y1)半径r この6つの値から 線分が円に含まれる、或いは円と交差する条件を判定したいのですが まるで検討がつきません。 円の式は (x - x1)^2 + (y - y1)^2 = r^2 でしょうか。(自信無し) リアルタイムにコンピューターで計算するため 出来れば少ない計算量で計算させたいのですが。。。 宜しくお願い致します。

  • 座標を結んだ線分の交差

    配列 x, y に(実数)値が与えられており、 (x[1], y[1]) を座標平面上の点 P1 、(x[2], y[2]) を点 P2 、… と考えたとき、 P1とP2を結んだ線分と、P3とP4を結んだ線分が交差しているかを判断する プログラム(アルゴリズム)はどのように考えることができるでしょうか? 結ぶ2点を通る直線の傾きなどを求めても、どのように利用すればよいか思いつきませんでした。 C言語というより数学の話かもしれませんが、ご教示いただければ幸いです。 なかなか方法を思いつかず、私の考察を提示できずに恐縮ですが宜しくお願いいたします。

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

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

  • matlab初心者です。

    どなたかアドバイスよろしくお願いいたします。 2点の座標(ax1,ay1),(bx1,by1)が与えられた時、2点の座標を結ぶ線分とy軸とのなす角を求めたい場合、 atan2(by1-ay1,bx1-ax1)で良いのでしょうか。 また、この2点が時系列上で変化する{(axn,ayn),(bxn,byn)のように座標が多くある}場合、コードを簡略化することはできないでしょうか。 恐縮ですがどなたかよろしくお願いいたします。

  • 数学orアルゴリズムが得意の方(線分と線分の交点判別)

    C言語のアルゴリズムを勉強中です。 線分A(A(x1,y1),B(x2,y2))と線分B(C(x3,y3),D(x4,x4))が交差するかどうかを判別し、交差するのであればその交点P(X,Y)を求める。 また、その交点がどちらか一方の線分上にあるかどうかも判別したいのです。 一番効率よくやるにはどのようにすればよいでしょうか。 例えば 1、三角形の符号付き面積を使って交差するかどうかと各点が線分上にあるかどうかを判別し、その後交点を求める 2、とり合えず交点を求めてその交点が各線分内(上)にあるかどうかを判別 他にもたくさんありそうですがとにかく出来るだけ計算回数を減らしたいのです。(さっき求めた~~を~~するといったかんじで) 出来れば流れ全体を書いていただきたいのですが書き込むのが大変だと思うのでせめて使う判別式だけでも教えてください。 これが出来たら、 多角形と多角形の交点判別のアルゴリズムにも挑戦しようと思っています。 数学の得意な方、アルゴリズムを考えるのが好きな方 よろしくお願いします。

  • 線分同士の交点の判定

    線分の交差判定についてネットで調べていたら、以下のような処理で できると書かれていたページがあったのですが、どうしても理解する事が できません。 もしできれば、解説を頂いてもいいでしょうか。 よろしくお願いします。 //2次元での線分と線分の交差判定と交点 BOOL CheckCrossLine(CONST D3DXVECTOR2* pvA1,           CONST D3DXVECTOR2* pvA2,           CONST D3DXVECTOR2* pvB1,           CONST D3DXVECTOR2* pvB2,           D3DXVECTOR2* pvOut) { D3DXVECTOR2 v1 = *pvA1 - *pvB1; D3DXVECTOR2 vA = *pvA2 - *pvA1; D3DXVECTOR2 vB = *pvB2 - *pvB1; if (*pvA1 != *pvA2) ; else return FALSE;//線分が点のときは交差していないとする if (*pvB1 != *pvB2) ; else return FALSE;//線分が点のときは交差していないとする FLOAT fDeno = vA.x * vB.y - vA.y * vB.x;//外積の長さ //分母が0で、平行なときは if (fDeno != 0.0f) ; else return FALSE;//交差していないことにする FLOAT t = (v1.y * vB.x - v1.x * vB.y) / fDeno; FLOAT s = (v1.y * vA.x - v1.x * vA.y) / fDeno; if (t < 0.0f || t > 1.0f || s < 0.0f || s > 1.0f) return FALSE;//交差していない else { //交点を返す pvOut->x = vA.x * t + pvA1->x; pvOut->y = vA.y * t + pvA1->y; return TRUE;//交差 }

  • 座標の和に関する証明

    原点をo(0,0)とし、a(ax,ay),b(bx,by)という点を取ります。 このとき、cという点を四角形oacbが平行四辺形になるように取ると、cは、c(ax+bx,ay+by)という、座標を取りますが、cが必ず、このような座標を取ることは、どの様に証明したら良いのでしょうか? どなたか解答お願いします。