如何计算线段的法向量?

时间:2009-08-07 08:35:37

标签: math geometry vector

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

我可以找到许多关于3D平面飞行的东西,但没有2D东西。

请轻松学习数学(欢迎使用工作示例,图表或算法的链接),我是一名程序员,而不是我的数学家;)

4 个答案:

答案 0 :(得分:216)

如果我们定义dx = x2-x1和dy = y2-y1,则法线为(-dy,dx)和(dy,-dx)。

请注意,不需要分割,因此您不会冒险除零。

答案 1 :(得分:85)

另一种思考方式是计算给定方向的单位矢量,然后应用逆时针旋转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

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

答案 2 :(得分:10)

这个问题早已发布,但我找到了另一种方法来回答这个问题。所以我决定在这里分享。
首先,必须知道:如果两个矢量是垂直的,它们的点积等于零 法线向量(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)

答案 3 :(得分:7)

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是