假设我的线段从(x1,y1)到(x2,y2)。如何计算垂直于直线的法向量?
我可以找到许多关于3D平面飞行的东西,但没有2D东西。
请轻松学习数学(欢迎使用工作示例,图表或算法的链接),我是一名程序员,而不是我的数学家;)
答案 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是