( a , b ) から ( x , y ) までの線があり、( x , y ) から始まる長さ ℓ の線を描きたいと思います。元の線とは θ の角度になります。
この新しい線の終点の座標を計算するにはどうすればよいですか? 図を参照してください。
よし、いろいろ書き込んだ結果、以下のようになった。
破線は、x 軸と y 軸に平行な線を表します。
m = x − a
n = y − b
α = tan −1 (n / m)
β = α − θ
p = ℓ cos β
q = ℓ sin β
c = x + p
d = y + q
この種のものには、デカルト座標よりもベクトル代数を使用する方がほとんどの場合簡単です。ポイントにラベルを付けることから始めましょう。
R(θ)を反時計回りに θ ラジアン回転する行列とする:
次に計算します。
v = B − A ( AからBへのベクトル)
v^ = v / | v | ( v方向の単位ベクトル)
ŵ = R(−θ) v̂ ( BC方向の単位ベクトル; 回転は時計回りなので、ここでは R(θ) ではなく R(−θ) が必要です)
w = ℓ ŵ ( BC方向の長さ ℓ のベクトル)
C = B + w
このアプローチにより、逆正接を計算する必要がなくなりますが、これには注意が必要です (単純に行うと、BがA の垂直方向の上または下にあるときに問題が発生します。ただし、ほとんどの言語には、atan2
このケースを処理するためのような関数があります)。
ベクトル ライブラリを備えた適切なプログラミング言語では、おそらく次のように、これをワンライナーで記述できるはずです。
C = B + (B - A).unit().rotate(-theta) * l