您希望在方向(a,b,c)的线上投影矢量(x,y,z).
如果(a,b,c)是单位向量,则结果只是(x,y,z).(a,b,c)(a,b,c)=(ax + by + cz)(a,公元前)
如果它不是一个单位向量使它成为一个,将其除以它的标准.
编辑:一点理论:
设E为维数N的矢量空间:
设F为矢量a指向的直线.与F正交的超平面是:
现在让我们选择E中的向量x,x可以写成:
其中xF是F方向上的x坐标,x正交是正交超平面上的坐标.
你想找到xF :(它与我上面写的完全相同)
您应该仔细查看有关正交投影的维基百科文章,并尝试在网络上找到更多内容.
您可以将其概括为任何F,如果它不再是一条线,而是一个计划然后采用F正交并以相同的方式分解x等等.
这个话题显然很老了,我认为原始海报的意思是矢量而不是线条。但就谷歌而言:
与向量不同,线(必然)的原点不在 (0,0,0) 处。所以不能只用一个方向来描述,它还需要一个起源。这是线的零点;这条线可以延伸到这一点之前和之前,但是当你说你沿着这条线为零米时,这就是你的意思。
因此,要将一个点投影到一条线上,您首先需要将该点转换为局部坐标系,您可以通过从该点减去原点来实现(例如,如果栅栏柱是您从的“线”) GPS 坐标为“北面 5 米,栅栏柱底部上方 1 米”)。现在在这个局部坐标系中,线只是一个向量,所以我们可以使用普通的点积方法得到点的投影。
pointLocalFrame = point– origin
projection = dotProduct(lineDirection, pointLocalFrame)
Run Code Online (Sandbox Code Playgroud)
注意:这假设线的长度是无限的,如果投影大于实际线长度,则没有投影
注意:lineDirection 必须标准化;即它的长度必须是 1
注意:两个向量 (x1,y1,z1) 和 (x2,y2,z2) 的点积是 x1*x2+y1*y2+z1*z2