-PR-
解決
済み

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

  • 困ってます
  • 質問No.24651
  • 閲覧数4627
  • ありがとう数9
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 65% (13/20)

プログラムを組んでいるのですが、困っています。

2線の斜線が、交差する点の求め方を教えて下さい。
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.5
レベル10

ベストアンサー率 44% (81/181)

 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

お礼率 65% (13/20)

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

又、困った時はよろしくお願いします。
投稿日時 - 2001-01-07 11:45:15
-PR-
-PR-

その他の回答 (全5件)

  • 回答No.1
レベル11

ベストアンサー率 55% (155/280)

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

お礼率 65% (13/20)

座標値での計算方法を教えて下さい。

値は
線a
a1 x0 y0
a2 x12 y13
線b
b1 x4 y11
b2 x7 y3
投稿日時 - 2001-01-05 21:53:19


  • 回答No.2
レベル10

ベストアンサー率 33% (53/157)

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

x = - (b1 - b2) / (a1 - a2)
y = (a1*b2 - a2*b1) / (a1 - a2)

ですね。
(中学の教科書に載ってますよ?)

こういうことではないのであれば、補足ください。
補足コメント
lible_io

お礼率 65% (13/20)

座標値での計算方法を教えて下さい。

値は
線a
a1 x0 y0
a2 x12 y13
線b
b1 x4 y11
b2 x7 y3
投稿日時 - 2001-01-05 21:44:21
お礼コメント
lible_io

お礼率 65% (13/20)

お世話様でした。

又、困った時はよろしくお願いします。
投稿日時 - 2001-01-07 11:52:39
  • 回答No.3
レベル11

ベストアンサー率 55% (155/280)

ある直線が点(x1,y1)と点(x2,y2)を通るとき、 y-y1 = (y2-y1)(x-x1)/(x2-x1) となりますから、これを展開すれば y=ax+b の形に変形できます。 ...続きを読む
ある直線が点(x1,y1)と点(x2,y2)を通るとき、
y-y1 = (y2-y1)(x-x1)/(x2-x1)
となりますから、これを展開すれば y=ax+b の形に変形できます。
お礼コメント
lible_io

お礼率 65% (13/20)

お世話様でした。

又、困った時はよろしくお願いします。
投稿日時 - 2001-01-07 11:52:07
  • 回答No.4
レベル7

ベストアンサー率 50% (7/14)

コンピュータにやらせるなら、まず傾きを計算させて変数に入れてしまうといいんじゃないですか? 線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) で出ると思います。ちゃんと展開して約分すれば ...続きを読む
コンピュータにやらせるなら、まず傾きを計算させて変数に入れてしまうといいんじゃないですか?
線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

お礼率 65% (13/20)

間違いなく計算値と実数値が合いました。
お世話様でした。

又、困った時はよろしくお願いします。
投稿日時 - 2001-01-07 11:43:45
  • 回答No.6
レベル8

ベストアンサー率 33% (10/30)

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

頂点a,b,cがあるとします。
ベクトルabとacの外積を求めると頂点cがベクトルabに対して右側にあるか
左側にあるかが外積の正負によって判定できます。

これと次のことから直線の交差を判定できます。

直線a1a2と直線b1b2が交わる

頂点a1と頂点a1が直線b1b2をはさんで反対側にある
かつ頂点b1と頂点b2が直線a1a2をはさんで反対側にある。

外積の計算方法はちょっと忘れてしまいました。
すいません。
お礼コメント
lible_io

お礼率 65% (13/20)

申し訳ございません。
回答は出ているのですが、質問を閉じるのを忘れていました。
投稿日時 - 2001-02-17 00:45:19
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ