(x1、y1)から(x2、y2)へのラインセグメントがあるとします。線に垂直な法線ベクトルを計算するにはどうすればよいですか?
3Dの平面に対してこれを行うことについては多くのことを見つけることができますが、2Dのものはありません。
数学を簡単に行ってください(機能する例、図、またはアルゴリズムへのリンクは大歓迎です)。私は数学者というよりもプログラマーです;)
(x1、y1)から(x2、y2)へのラインセグメントがあるとします。線に垂直な法線ベクトルを計算するにはどうすればよいですか?
3Dの平面に対してこれを行うことについては多くのことを見つけることができますが、2Dのものはありません。
数学を簡単に行ってください(機能する例、図、またはアルゴリズムへのリンクは大歓迎です)。私は数学者というよりもプログラマーです;)
回答:
dx = x2-x1とdy = y2-y1を定義すると、法線は(-dy、dx)と(dy、-dx)になります。
除算は必要ないため、ゼロで除算するリスクがないことに注意してください。
(x', y') = (-y, x)
そして(x', y') = (y, -x)
、右のようですが、なぜ1が使用するであろうdx
とdy
ここに。さらに、傾きに基づいて、m1 * m2 = -1
直角線の場合、それゆえdy' = dx' * (-dx/dy)
、そしてdx' = dy' * (-dy/dx)
、あなたの方程式はnormal.x = x' = -dy
どうですか?
それを考えるもう1つの方法は、特定の方向の単位ベクトルを計算してから、反時計回りに90度回転して法線ベクトルを取得することです。
一般的な2D変換の行列表現は次のようになります。
x' = x cos(t) - y sin(t)
y' = x sin(t) + y cos(t)
ここで、(x、y)は元のベクトルのコンポーネントであり、(x '、y')は変換されたコンポーネントです。
t = 90度の場合、cos(90)= 0およびsin(90)= 1になります。これを代入して乗算すると、次のようになります。
x' = -y
y' = +x
前と同じ結果ですが、それがどこから来たかについて少し説明があります。