如何计算线段的法向量?

假设我有一条从(x1,y1)到(x2,y2)的线段。 如何计算垂直于线的法向量?

我可以在3D中find很多有关这样的飞机的东西,但没有2D的东西。

请在math上轻松一些(链接到工作的例子,图表或algorithm是受欢迎的),我是一个程序员,而不是我是一个math家;)

如果我们定义了dx = x2-x1和dy = y2-y1,那么法线是(-dy,dx)和(dy,-dx)。

请注意,不需要划分,所以你不用冒被零除的风险。

另一种考虑方法是计算给定方向的单位向量,然后应用90度逆时针旋转来获得法向量。

一般2D变换的matrix表示如下所示:

 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 

与之前所给出的结果相同,但是对于其来源有更多的解释。

 m1 = (y2 - y1) / (x2 - x1) 

如果垂直两行:

 m1*m2 = -1 

然后

 m2 = -1 / m1 //if (m1 == 0, then your line should have an equation like x = b) y = m2*x + b //b is offset of new perpendicular line.. 

如果你想从你定义的点传递它,b是一些东西

这个问题已经被很久以前发布了,但是我find了一种可以回答的方法。 所以我决定在这里分享。
首先,必须知道:如果两个向量垂直,他们的点积等于零。
法向vector(x',y')垂直于连接(x1,y1)(x2,y2)的直线。 这条线有方向(x2-x1,y2-y1)(dx,dy)
所以,

 (x',y').(dx,dy) = 0 x'.dx + y'.dy = 0 

满足上式的大量对(x',y')。 但总是满足的最好的一对是(dy,-dx)(-dy,dx)