假设有一条从(x1,y1)到(x2,y2)的线段。如何计算垂直于直线的法向量?
我可以找到很多关于在3D平面上做这个的东西,但没有2D的东西。
请在数学上放松(欢迎链接到工作示例,图表或算法),我是一个程序员,而不是一个数学家;)
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 - x1和dy = y2 - y1,则法线为(-dy, dx)和(dy, -dx)。
dx = x2 - x1
dy = 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)
(x',y').(dx,dy) = 0 x'.dx + y'.dy = 0
有很多对(x',y')满足上面的方程。但ALWAYS满足的最佳对是(dy,-dx)或(-dy,dx)
(dy,-dx)
(-dy,dx)