直線ABをm:nに分けると云うやつですね。

公式は、こんなんだけれど、どうスクリプトに起こすのか?
m:nっていうのが難所。
とりあえず図解。

これをm:nを使わずに表現したい。
計算する場合、たいていaとbは設定できます。
そのa-b間の特定の座標が知りたいわけなので、
こんな感じの図になりました。
コレを使って内分点の式を書き換えると、

これでスクリプトにする事ができそうな気がします。
引数は
- 開始位置
- 終了位置
- 割合
1 2 3 4 5 6 7 8 9 10 11 | 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 とすれば良いわけです。
なので、
1 2 3 4 5 6 7 8 | global proc vector calcDividingPoint( vector $sp , // 開始位置 vector $ep , // 終了位置 float $rate ) // 割合 { return ( (1.0- $rate ) * $sp + $rate * $ep ); } |
これで十分。
ちなみに $rate に1以上を設定すると外分点になります。
0 件のコメント:
コメントを投稿