Algorithm 计算朝向给定侧的线的法线
给定的是一条直线(段),由两个向量定义Algorithm 计算朝向给定侧的线的法线,algorithm,math,geometry,Algorithm,Math,Geometry,给定的是一条直线(段),由两个向量定义start(x,y)和end(x,y)。我还有一个点p(x,y),它位于直线分隔的两个区域中的任何一个(即不在直线上) 我如何计算直线朝向p所在侧的法线?我的数学技能有点生疏,因此我无法给出准确的计算结果,但您要做的是(假设您描述的是2D): 首先你计算一个正常的n 然后计算P',它是点P在直线上的垂直投影。 基本上,你要做的是,你“创建”另一条线,并使用步骤1中的向量n作为方向(y=p+x*n其中y,p和n是向量,p实际上是你的p(x,y),x是实数),然
start(x,y)
和end(x,y)
。我还有一个点p(x,y)
,它位于直线分隔的两个区域中的任何一个(即不在直线上)
我如何计算直线朝向
p
所在侧的法线?我的数学技能有点生疏,因此我无法给出准确的计算结果,但您要做的是(假设您描述的是2D):
y=p+x*n
其中y,p和n是向量,p实际上是你的p(x,y),x是实数),然后你将这条线与第一条线相交,它们相交的点是p'。既然你是奥地利人,其他人请原谅我用了一个德语单词,我真的不知道英文翻译,也找不到。P'=Lotfußpunkt
A = (a,b) and B = (c,d) define the line segment
P = (p,q) be the other point.
定义:
dot( (p,q), (r,s) ) == p*r + q*s
然后向量:
v = ( c-a, d-b)
定义沿线段的方向。其垂直度为:
u = (d-b, (-(c-a)) = (d-b,a-c)
这可以通过使用v
获取点积来看出。要从垂线获取法线,只需除以其长度:
n = u /|u|, |u| = sqrt( dot(u,u))
我们现在只需要知道p相对于正常值的位置。如果我们采取:
dir = dot( (P-A), n) )
然后
dir>0
表示n
与p
方向相同,而dir<0
表示方向相反。如果dir==0
,则P
实际上位于延长线上(不一定是线段本身)。首先,通过取
结束-开始
和结束
的叉积,确定点位于线的哪一侧:
z=(xend xstart)(yp yend)-(yend ystart)(xp xend)
如果z>0,则该点位于直线的左侧(由站在起点并面向终点的人看到)。如果z(-yk,xk)
或者,如果该点位于直线的右侧,则向右旋转k:
(xk,yk)=>(yk,-xk)y=mx+c
是法线方程,其中m为斜率,c为任何常数
你有开始和结束。让我们把它们称为(x1,y1)和(x2,y2)以及连接它们的线路L1。
这条线的斜率m1为(y2-y1)/(x2-x1)。这条线垂直于你需要的线,我们称之为L2,斜率为m2。两条相互垂直的直线的斜率的乘积为-1。因此,,
m1*m2=-1
因此,可以计算m2。现在,你需要找到直线L2的方程。在P(x,y)线上有一个点。您可以用这种方式替换:
y=m2*x+c
这会给你c。获得直线方程后,可以将其转换为参数化形式,如下所示:
直线方程如下所示
A = start.y-end.y
B = end.x-start.x
C = start.x*end.y-start.y*end.x
A*x + B*y + C = 0
到点线的最小距离d
为
d = (A*px+B*py+C)/sqrt(A^2+B^2)
如果该值为正值,则该点从矢量(开始->结束)
逆时针旋转。如果为负数,则为顺时针旋转。因此,如果(开始->结束)
指向上,则直线左侧的距离为正
范例
start = (8.04, -0.18)
end = (6.58, 1.72)
P = (2.82, 0.66)
A = (-0.18)-(1.72) = -1.9
B = (6.58)-(8.04) = -1.46
C = (8.04)*(1.72)-(-0.18)*(6.58) = 15.01
d = (A*(2.82)+B*(0.66)+C)/√(A^2+B^2) = 3.63
对d
的计算显示了与草图中向量(近->p)
长度相同的值。N=(Ey-Sy,Sx-Ex)
垂直于直线(它是SE
旋转90°,未标准化)
然后计算点积的符号
N . SP = (Ey - Sy)(Px - Sx) + (Sx - Ex)(Py - Sy),
它会告诉你法线指向哪一边。你能详细说明一下第2步吗?谢谢。刚刚更新了我的答案,希望能更清楚。代替第3步,您也可以从第2步为x求解方程,如果x为负,n为您的答案,但是如果x为正,-n为您的答案。最后一行中
xnorm
的值是多少?ynorm和xnorm是法线方程中的变量您希望p到直线的最小距离是多少?