直線ABをm:nに分けると云うやつですね。
公式は、こんなんだけれど、どうスクリプトに起こすのか?
m:nっていうのが難所。
とりあえず図解。
これをm:nを使わずに表現したい。
計算する場合、たいていaとbは設定できます。
そのa-b間の特定の座標が知りたいわけなので、
こんな感じの図になりました。
コレを使って内分点の式を書き換えると、
これでスクリプトにする事ができそうな気がします。
引数は
- 開始位置
- 終了位置
- 割合
global proc vector calcDividingPoint( vector $sp, // 開始位置 vector $ep, // 終了位置 float $rate ) // 割合 { float $length=mag( $sp-$ep ); float $m=$length * $rate; return ( ( ($length-$m) * $sp + $m * $ep ) / $length ); }
ま、ここで終わっても使えないことは無いのですが、よく見ると $length を掛けたり
割ったりしまくっています。
$rate そもそも百分率なので、$length でなく 1.0 とすれば良いわけです。
なので、
global proc vector calcDividingPoint( vector $sp, // 開始位置 vector $ep, // 終了位置 float $rate ) // 割合 { return ( (1.0-$rate) * $sp + $rate * $ep ); }
これで十分。
ちなみに $rate に1以上を設定すると外分点になります。
0 件のコメント:
コメントを投稿