直線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 件のコメント:
コメントを投稿