--
--.--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2009
03.26

2点を通る2直線の交点の求め方

Category: JAVA
CrossPoint.jpg

ゲームを作っていると2直線の交点を求めたいことがよくある。
たいていは、前に作ったルーチンを探し出してきてコピペですませてしまうんだけど、
「なんで外積2回で求まるんだっけ?」
と思ったら気になってしょうがなくなってきた。


2点(AB,CD)を通る2直線(AB,CD)の交点を求める手順は下のとおり。

CrossMath.png

そして2次元ベクトルの外積は次のような計算で、結果はベクトルではなくてただの数値になる。
これも1回作ってしまうと、あとは気にしなくなるのでいつまでたっても覚えない…。

CrossMath.png

と、まとめてみたのはいいけど文章と数式だけでは全然イメージが浮かばないので、アプレットで図を作ってみる。



2本の細くて黒い実線が交点を求めたい直線だ。
外積を求める3つのベクトルは黒の矢印と、緑の矢印になっている。

さて、CDとABの外積を取るのだがその前にピンク色の矢印を見てほしい。
これは何かというとベクトルCDと同じ方向、同じ長さのベクトルである。

2本の矢印は、図で見るとちがう位置にあるから別物に見えるが、
ベクトルとしてみると実はまったく同じなのだ。

そう、ベクトルは方向と長さがあるだけで、始点位置は含まれないから
どこに移動させても意味は変わらないのである。

元の黒矢印でCD×ABを考えていてもイメージがつかみにくいが、
ピンク色のベクトル×ABだと外積を使う意味がつかめてくる。

これで求めた外積の値を図に描くと、点Bから出ている赤い直線の長さになる。
同じくCD×ACは点Cからの青い直線の長さだ。

交点Pは直線ABの上にあるので、ベクトルABを何倍かした位置にあるはず。
この何倍かが、青の長さ÷赤の長さで出てくるのである。

の方が長ければ、点Aから点Bを通った先に交点があるだろうし、
の方が長ければ、点Aから点Bまでの間に交点があることになる。

アプレットでは緑色の点をドラッグすれば移動できるので、
線の意味を思い浮かべながらいろいろ試すと理解が深まるのではないかと思う。
トラックバックURL
http://youfc2.blog10.fc2.com/tb.php/11-e2820d4f
トラックバック
コメント
はじめまして
すごくわかりやすいです!

そこで、お一つ質問があります。

ベクトルABは大きさ1のベクトルにして外せきの計算を行わなければならないのでしょうか?
notchmendot 2012.06.10 21:41 | 編集
すみません。。
決してそうでもないようですね。
二つのベクトルがあれば方向の大きさは考えなくてよいようですね。

失礼しました><
notchmendot 2012.06.10 22:16 | 編集
管理者にだけ表示を許可する
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。