我指着x,y,z
和行方向x,y,z
如何在此行上获得点投影
我试过这段代码
http://www.zshare.net/download/93560594d8f74429/
例如在我得到的代码中使用函数交集时 线方向是(1,0,0),点(2,3,3)将有投影(x,0,0中的值),这是错误的值
任何建议 最好的问候
答案 0 :(得分:6)
你想在方向(a,b,c)的线上投影矢量(x,y,z)。
如果(a,b,c)是单位向量,则结果只是(x,y,z)。(a,b,c)(a,b,c)=(ax + by + cz) (A,b,C)
如果它不是一个单位向量,那就把它作为一个,按它的标准来划分它。
编辑:一点理论:
设E为维数N的矢量空间:
让F为矢量a指向的直线。与F正交的超平面是:
现在让我们在E中选择一个向量x,x可以写成: 其中xF是F方向的x坐标,x orthogonal是正交超图上的坐标。
你想要找到xF :(它与我上面写的完全相同)
您应该仔细查看orthogonal projections上的维基百科文章,并尝试在网络上找到更多内容。
你可以将它概括为任何F,如果它不再是一条线,而是一个计划然后采用F正交并以相同的方式分解x等等。
答案 1 :(得分:4)
这个主题显然很旧,我认为原始海报意味着矢量不是线。但是出于Google的目的:
与矢量不同,一条线(必然)的原点在(0,0,0)。所以不能仅仅通过一个方向来描述,它也需要一个起源。这是该线的零点;这条线可以延伸到此点之前和之前,但当你说你沿着这条线是零米时,这就是你的意思。
因此,要将点投影到一条直线上,首先需要将该点转换为局部坐标系,您可以通过从该点减去原点(例如,如果栅栏柱是'线')你从GPS坐标到'北边5米,栅栏底部上方一米')。现在在这个局部坐标系中,线只是一个矢量,所以我们可以使用正常的点积方法得到点的投影。
pointLocalFrame = point– origin
projection = dotProduct(lineDirection, pointLocalFrame)
注意:假设线条长度无限,如果投影大于实际线条长度则没有投影
注意:lineDirection必须标准化;即它的长度必须是1
注意:两个向量(x1,y1,z1)和(x2,y2,z2)的点积为x1 * x2 + y1 * y2 + z1 * z2