まずベクトルの正規化を学ぶにあたって、以下のお題を進めながら学んでいこうと思う。
お題:3D空間に存在する球(sphB)を球(sphA)に接するように移動する
デカルト座標で示すとこんな感じ。分かりやすく2Dで考えていきます。
この図から見るように、moveメソッドに引数として赤の矢印のベクトル値を渡してやれば、OKだ。
①赤いベクトルの大きさを求める。
大きさをsph_distanceとすると、
sph_distance = (distance sphA.pos sphB.pos)-(sphA.radius+sphB.radius)
となる。
②赤いベクトルの単位ベクトル(方向)を求める。
①の大きさのベクトルを求めるとなると、大きさ1となる単位ベクトルが必要になる。
なぜなら、ベクトルは大きさと単位ベクトルの積で表されるからである。
こんな感じかな{%トホホwebry%}
単位ベクトルが必要ということで、それを出すにはnormalize
sph_unit_vector=normalize (sphA.pos-sphB.pos)
となる。
③上記のように①*②で赤いベクトルの値が求められる。
赤いベクトルをsph_vectorとすると、
sph_vector = sph_distance*sph_unit_vector
④最後にmoveメソッドに③を渡してやればOKだ。
move $sphB sph_vector
以上、ベクトルを使った移動を見てきたが、ベクトルの正規化という言葉が出てきてない。
ベクトルの正規化というのは②で見られるようにベクトルを単位ベクトル化するということである。
メソッドで言うと、normalize
0 件のコメント:
コメントを投稿