• ベストアンサー

2線の交点の求め方教えて下さい。

プログラムを組んでいるのですが、困っています。 2線の斜線が、交差する点の求め方を教えて下さい。

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

  • ベストアンサー
  • TCM
  • ベストアンサー率44% (81/181)
回答No.5

 J-Jさんのご回答で求めることができますよね。  ただし、これが「一般の2直線の交点を求める」ということであればもう少し慎重になる必要があります。問題を整理して、  直線a:点a1(Xa1,Ya1)と点a2(Xa2,Ya2)を結ぶ直線  直線b:点b1(Xb1,Yb1)と点b2(Xb2,Yb2)を結ぶ直線 とします。すると直線の傾きは、  直線aでは A=(Ya2-Ya1)/(Xa2-Xa1)、  直線bでは B=(Yb2-Yb1)/(Xb2-Xb1) ですが、それぞれXa2=Xa1、Xb2=Xb1のときに零による除算が発生します。これを事前にチェックして対応する必要があります。  さらに直線の傾きが等しいとき(A=B)についても同様のことが言えます。もっともこの場合には交点なしというコードを返すようにしないといけませんが。  さらにさらに、これが直線ではなくて「2線分の交点を求める」という問題ならば、求めた交点が線分上にのっているかどうかも確認しなければいけません。  汎用の交点を求める関数を作っておくのも今後のために悪くないと思いましたので蛇足回答をいたしました。

lible_io
質問者

お礼

間違いなく計算値と実数値が合いました。 お世話様でした。 又、詳細説明有り難うございます。 又、困った時はよろしくお願いします。

その他の回答 (5)

  • nagata
  • ベストアンサー率33% (10/30)
回答No.6

ベクトルと外積を使うときれいに解決するという話でしょう。 頂点a,b,cがあるとします。 ベクトルabとacの外積を求めると頂点cがベクトルabに対して右側にあるか 左側にあるかが外積の正負によって判定できます。 これと次のことから直線の交差を判定できます。 直線a1a2と直線b1b2が交わる ⇔ 頂点a1と頂点a1が直線b1b2をはさんで反対側にある かつ頂点b1と頂点b2が直線a1a2をはさんで反対側にある。 外積の計算方法はちょっと忘れてしまいました。 すいません。

lible_io
質問者

お礼

申し訳ございません。 回答は出ているのですが、質問を閉じるのを忘れていました。

  • J-J
  • ベストアンサー率50% (7/14)
回答No.4

コンピュータにやらせるなら、まず傾きを計算させて変数に入れてしまうといいんじゃないですか? 線aの傾きをA=(y13-y0)/(x12-x0) 線b の傾きをB=(y3-y11)/(x7-x4)とおくと、 求める座標(X、Y)は X=(A*x0-y0-B*x4+y11)/(A-B) Y={A*y11-B*Y0+AB*(x0-x4)}/(A-B) で出ると思います。ちゃんと展開して約分すれば簡単になるのかもしれないけど。。。 適当に連立方程式を解いたので、自信はないです。 最後の式はゼロがあったほうが計算し易いのでa1 x0 y0 とb1 x4 y11 を使いましたが、もちろん、a2とb2でもだいじょうぶです。 x0 y0 のところは省いてもいいですが、一般形にならなくなるので一応書いときました。

lible_io
質問者

お礼

間違いなく計算値と実数値が合いました。 お世話様でした。 又、困った時はよろしくお願いします。

回答No.3

ある直線が点(x1,y1)と点(x2,y2)を通るとき、 y-y1 = (y2-y1)(x-x1)/(x2-x1) となりますから、これを展開すれば y=ax+b の形に変形できます。

lible_io
質問者

お礼

お世話様でした。 又、困った時はよろしくお願いします。

  • atsuota
  • ベストアンサー率33% (53/157)
回答No.2

#1のpunchan_jpさんの回答どおりだと思うので、計算してみました。 x = - (b1 - b2) / (a1 - a2) y = (a1*b2 - a2*b1) / (a1 - a2) ですね。 (中学の教科書に載ってますよ?) こういうことではないのであれば、補足ください。

lible_io
質問者

お礼

お世話様でした。 又、困った時はよろしくお願いします。

lible_io
質問者

補足

座標値での計算方法を教えて下さい。 値は 線a a1 x0 y0 a2 x12 y13 線b b1 x4 y11 b2 x7 y3

回答No.1

平面上での話でしょうか? その2本の直線はどのように与えられるのでしょう? y=ax+b の1次式で与えられるとすると、 y=a1x+b1 y=a2x+b2 の交点は、この二つの式を連立方程式と考えて、x,yについて解けば求まります。

lible_io
質問者

補足

座標値での計算方法を教えて下さい。 値は 線a a1 x0 y0 a2 x12 y13 線b b1 x4 y11 b2 x7 y3

関連するQ&A

  • 交点から交点への 斜線の引き方

    Jw-cad 5で 交点から交点へ斜線の引こうとすると ジグザグになります どうすれば 交点から交点へ 直線が引けるでしょうか

  • 座標の交点の求めかた

    ある座標が、ある線分上に交差または重なるか調べるにはどう計算すれば良いのか教えて下さい。

  • 道路工事の人は交通整理をしてはいけない?

     最近交差点(付近でなく、交差する部分)で工事をしていなのですが、1斜線が規制され相互通行のため少し混んでいました。主要道路と交差している道路は交通量が主要道路に比べると少ないです。  なので、手信号でやると効率がいいと思いますが、やはりどんな理由があっても警察しかできないんでしょうか?

  • 線分同士の交点の判定

    線分の交差判定についてネットで調べていたら、以下のような処理で できると書かれていたページがあったのですが、どうしても理解する事が できません。 もしできれば、解説を頂いてもいいでしょうか。 よろしくお願いします。 //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;//交差 }

  • 道路交通法の道路標示について教えてください

    | | | | | | ------ --------   交差点2 ------ -------- | | | | | | ------ -------- 交差点1 ------ -------- | | | | |   |    道路1 上図で道路1は片側3斜線。交差点1と交差点2の距離は約10m。 上図の下から車で進行中、交差点1の一番左車線には道路に左向き矢印、但し矢印の下のほうは破線の矢印。車は交差点2を左折したい場合、交差点1の手前から道路1の一番左車線を進行して交差点1を左折せず直進して交差点2に向かう走行は違反ですか? ちなみに交差点2の一番左車線の左向き矢印は破線部分がない完全な 実線の左向き矢印です。 道路標示の矢印の破線付きと完全な実線はどう違うのでしょうか? 私のよく走る道路に以上のような道路があるもので悩んでいます。

  • 直進同士の過失割合について

    今月はじめ見通しの良い4斜線道路での事故です。 ∥ ----------------------- 横断----------------------- 歩道  ←私 ∥ ----------------------- ∥   L相手 ∥ ----------------------- ∥ ----------------------- 私は右から2斜線目相手は右から3斜線目を走行していました。 交差点手前3m以内で加害者がUターンしようと右側に私の車がいることを確認しないで斜線変更してきたためこちらは側面(助手席後方から真ん中すぎまで)を損傷しました。 加害者は確認していないことを認めています。 交差点の手前3mの時点では斜線変更してはいけませんし、3mしかない所から2斜線に渡り斜線変更してUターンして止まりました。 こちらはUターンしたので逃げられるかと思いました。 警察立会いで事故の道路幅などを測定もしていただきました。 加害者は100%悪かったと何度も認め、加害者の保険会社もそれを確認していることから、9:1で1割は加害者が負担していただくことになっていました。 それで終わっていたと思っていましたが、加害者が保険会社に電話して弁護士特約を使いたいと言い出したようで、弁護士対応になりました。 弁護士対応になったら白紙になるようですので、こちらがどのくらい不利になるのか教えてください。 隣の車の加害者がいきなり確認もせず斜線変更したこと。 斜線変更してはいけない場所での斜線変更。 3mもないところで2斜線にも渡って斜線変更しUターンしたこと。 加害者はどのくらい過失になりますか?

  • 原付きの2段右折について

    原付きの二段右折についてなのですが 基本的に3斜線以上は二段右折義務があるようですが 道路によっては交差点から交差点の間は2斜線で 交差点付近10~30メートル位のところから右折用の3本目が広がってる場合 どちらの右折が正しいですか?   どちらの右折が   正しいか分からない交差点 l l l l l l l l l↑↑→  l l l/ l l l l l l   2段右折義務の交差点 l l l l l l l l l↑↑→ l l l l l l l l l l l l  l l l l l l l l

  • 2車線 - 1車線 - 2車線・・・なぜ?

    初めての道を走っていました。遠からず右折するのがわかっていたので,2車線の右側の車線を軽快に運転…そこへ「左へ寄れ」の矢印の群れが出てきたので,あれあれ?と思いながらも左車線に入りました。道が狭くなったわけではなく,右車線のところには斜線部分が現れました。 ちょこっと走ったらもう交差点近く。斜線部分は右折車用の車線に変わったので,そこに入って無事交差点を右折しました。 この日は初めての道でしたが,実は自宅の近くにもこんなところがあります。1車線の部分は距離にしてほんの数十メートルだと思うのですが,一旦右車線を閉鎖して,また右折用に開けるのはなぜでしょうか。あのままずっと交差点まで右側を走り,右折してもいいような気がするのですが。 道幅が狭くなっていたり,工事中だったというわけではありません。理由をご存知の方がいらっしゃったら,よろしくお願いいたします。言葉だけで説明するのは難しいですね。解りにくくて申し訳ありません。

  • 交点をもとめる

    3点A(2,5,6)、B(5,2,6)、C(c1,c2,c3)があります。この3点を通る平面を作り、その平面に垂直でかつ点Cを通る直線を求めたいのですが、力不足でもどうやっても求まりません。 どなたか教えてください。

  • 今日、事故を起こしました。。。

    交通事故についてですが。 今日、事故を起こしてしまいました。 事故を起こした現場の状況としては、 片側一斜線の交差点信号前で、 直進は左斜線、右折は専用斜線の道路です。 事故の状況は、交差点信号手前にある駐車場から右折する際に、目の前の通りが渋滞していたので通れるのを待っていたところ、一台の車が道を譲ってくれたので右に発進しました。 その時、目の前の通りを通行していた右折路線へ進む車に正面衝突しました。 これだけでは私が悪いと思いますが、 相手側は完全に右折斜線上ではなく、 右折斜線が始まるあたりで、斜めに白いラインが書いてある路面でタイヤ1本位を対向車線にはみ出た状態で右折斜線に進んできました。 斜めに白いラインが書いてある路面は通常車は走行してはならないものだと思いますが、相手は私が悪いと言っています。 9:1だと。。。 私は、本来通行してはならない路面で更に少し反対車線にはみ出た状態で通行していた相手も悪いと思います。 詳しい方、教えてください。 よろしくお願いします。