三维点在线投影

AMH*_*AMH 0 c# algorithm 3d graphics geometry

我有点x,y,z

和行方向x,y,z

如何在这条线上获得点投影

我试过这段代码

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

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

任何建议最好的问候

Ric*_*bby 6

您希望在方向(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等等.

  • 如果您收到错误,请说明问题*中的错误,在*question*中发布*相关*代码(不一定是整个代码),并说明代码的哪一行会产生错误.没有人想下载一个zip文件来做别人的工作. (2认同)

Ric*_*gle 5

这个话题显然很老了,我认为原始海报的意思是矢量而不是线条。但就谷歌而言:

与向量不同,线(必然)的原点不在 (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