如何计算线段的法向量?

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

我可以找到很多关于在3D平面上做这个的东西,但没有2D的东西。

请在数学上放松(欢迎链接到工作示例,图表或算法),我是一个程序员,而不是一个数学家;)

240354 次浏览
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是从你定义的点开始传递的

如果定义dx = x2 - x1dy = y2 - y1,则法线为(-dy, dx)(dy, -dx)

注意,这里不需要除法,所以不用冒被0除的风险。

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

一般二维变换的矩阵表示是这样的:

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

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

这个问题很久以前就被贴出来了,但我找到了另一种方法来回答它。所以我决定在这里分享。
首先,我们必须知道:如果两个向量垂直,它们的点积等于零 法向量(x',y')垂直于连接(x1,y1)(x2,y2)的直线。这一行的方向是(x2-x1,y2-y1)(dx,dy) < / p >
(x',y').(dx,dy) = 0
x'.dx + y'.dy = 0

有很多对(x',y')满足上面的方程。但ALWAYS满足的最佳对是(dy,-dx)(-dy,dx)