2012年12月8日土曜日

TPで、任意の座標からもっとも近い線分上の点を求める

ちょっとタイトルが長くなってしまいました(汗)数学での良い言い回しとかありそうですが。。。
英語では、Closest Pointと言うのですかね?
ここで、躓いてたらいかんので画像でどういった事か説明します。

図①



















といった感じです。
点A,B,Cのベクトル値は確定してるものとして進めていきます。
今回は点Pを求めるにあたって、外積を使い求めていきます。
内積でも、求められますが 外積で求めていきたいと思います。
理由は、外積だと上で求めたものをちょっと応用すれば直線同士の交差点も求められます。
こんな感じです。 すばらしい!
内積だと、これは無理かな~と。すみません、憶測です^^

では、早速やっていきます。※関数とかTP用の表現を使っています。


はじめに、線分AB上の点を求める式です。こちらにも書きましたが復習です。

図②



















TP式①-- Apos+(unit(AB)*length(AP))

ベクトルAとABは、わかっていますので、ベクトルAPの大きさがわかれば、ベクトルPが求まります。



では、ベクトルAPの大きさを求めていきます。
わかりやすいように、辺d,e,fを割り当ててみました。
ベクトルAPの大きさがfということですね。

図③




















ピタゴラスの定理から、fを求めるにはeとdが解ければ求まりますね。


TP式②-- f = sqrt(d*d-e*e)


これで、ベクトルAPの大きさは求まります。
後はeとdを埋めていくだけです。

dの方はベクトルACの大きさを求めればよいので、求まります。
さてeですが、ここで外積を使います。

TP式③-- e = length(AB x AC)/length(AB)
※TP式③のベクトルABの大きさは、1でもなんでも揃っていれば良いらしい。

式の参考

こちら2Dでのある点から直線までの距離より

全ての値の準備ができたので、TPに組み込んでいきます。
上記の三つのTP式を組み込みました。
































さてさて、これの使いどころはいつになるのやら。。
近々公開かな。



















2 件のコメント:

  1. おおっ、これはすっごくいい感じ!すっとやりたかったんです
    次回はとても楽しみ^^

    返信削除
    返信
    1. どもです^^
      パーティクルを飛ばす方向のサンプルをとるためには、こういった数学的手法の組み合わせを覚えておくと強いですね。

      iGouさんにも、とても助けられています。
      自分は破壊系あんまりなので、破壊系ネタ楽しみにしています!!

      削除