- 2007/05/29 11:00
- 未分類
ベクトルa,bがあり、aをbに射影したベクトルをpとする。
a,bからpを求める式は以下のとおり。
vector $a, $b, $p;
$a = << 1, 2, 3 >>;
$b = << 9, 6, 3 >>;
float $len = $b; // length of $b
float $dot = dot( $a, $b );
float $tmp = $dot/($len*$len);
$p = << $tmp*$b.x, $tmp*$b.y, $tmp*$b.z >>;
以下、簡単な解説。
pの大きさは | a |cosθ となります。
| a |というのは a の大きさのことで、
sqrt( a.x*a.x+a.y*a.y+a.z*a.z );です。
melだと、vector型をfloat型に変換することで簡単に求められます。
また、normalizeというコマンドもあります。
どれを使ってもOK、だと思います。たぶん。
pの方向は b と同じになるので、bを正規化してやる必要があります。
正規化されたベクトルはは b / | b | によって求められます。
これを式にすると
p = | a |cosθ* ( b / | b | );
となり、これを展開すると、
p = dot( a, b ) / |b|^2 * b;
となります。
^2というのは2乗のことです。^3なら3乗です。
WEBで数式を書くのって大変だ。。
メモ代わりにほぼ全部本から丸写しwww
間違ってたらごめんなさーい。
詳しく知りたい方は [ ベクトル 射影 ] などで検索すると多分出てきます。
- Newer: [ 徒然 ] なんかちがう
- Older: [ CG本 ] Java関連の本
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://blog.taikomatsu.com/2007/05/29/mel-%e3%83%99%e3%82%af%e3%83%88%e3%83%ab%e3%81%ae%e5%b0%84%e5%bd%b1/trackback/
- Listed below are links to weblogs that reference
- [ MEL ] ベクトルの射影 from memlog