三维点在线投影

时间:2011-08-11 08:54:28

标签: c# algorithm graphics geometry 3d

我指着x,y,z

和行方向x,y,z

如何在此行上获得点投影

我试过这段代码

http://www.zshare.net/download/93560594d8f74429/

例如在我得到的代码中使用函数交集时 线方向是(1,0,0),点(2,3,3)将有投影(x,0,0中的值),这是错误的值

任何建议 最好的问候

2 个答案:

答案 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)

如果它不是一个单位向量,那就把它作为一个,按它的标准来划分它。

enter image description here


编辑:一点理论:

设E为维数N的矢量空间:

让F为矢量a指向的直线。与F正交的超平面是: enter image description here

现在让我们在E中选择一个向量x,x可以写成: enter image description here其中xF是F方向的x坐标,x orthogonal是正交超图上的坐标。

你想要找到xF :(它与我上面写的完全相同)

enter image description here

您应该仔细查看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