我有一个3D点(point_x,point_y,point_z),我想把它投影到3D空间的2D平面上,其中(平面)由点坐标(orig_x,orig_y,orig_z)和一元垂直向量(normal_dx)定义,normal_dy,normal_dz).
我该怎么处理?
tmp*_*rce 77
1)从你的orig观点到关注点制作一个矢量:
v = point-orig (in each dimension);
2)用单位法向量取该向量的点积n:
dist = vx*nx + vy*ny + vz*nz; dist =沿法线从点到平面的标量距离
3)将单位法向量乘以距离,并从您的点中减去该向量.
projected_point = point - dist*normal;
用图片编辑:我已经修改了你的图片了.红色是v; vdot normal=蓝色和绿色的长度(dist上图).蓝是normal*dist. Green = blue * -1:找到planar_xyz,从中开始point并添加绿色矢量.

bob*_*obo 38
这是很容易,你需要做的就是找到垂直(简称这里|_)从点距离P的平面,然后翻译 P 回用的垂直距离在正常的平面的方向.结果是翻译P坐在飞机上.
举个简单的例子(我们可以通过检查来验证):
设n =(0,1,0),P =(10,20,-5).

投影点应为(10,10,-5).你可以通过检查看到Pproj是垂直于平面的10个单位,如果它在平面上,它将具有y = 10.
那么我们如何分析才能找到它呢?
平面方程是Ax + By + Cz + d = 0.该等式意味着"为了使点(x,y,z)在平面中,它必须满足Ax + By + Cz + d = 0".
对于上面绘制的平面,Ax + By + Cz + d = 0等式是多少?
该平面具有正常的n =(0,1,0).只需使用飞机上已有的测试点即可找到d :
(0)x + (1)y + (0)z + d = 0
Run Code Online (Sandbox Code Playgroud)
点(0,10,0)在平面内.在上面插入,我们发现,d = -10.然后平面方程为0x + 1y + 0z - 10 = 0(如果简化,则得到y = 10).
一个很好的解释d是它说明了平面沿着法线平移所需的垂直距离,让平面穿过原点.
无论如何,一旦我们有了d,我们可以通过以下等式找到任何点到飞机的距离:

| _距离平面有3种可能的结果类别:
无论如何,

您可以通过上图中的检查验证其是否正确
Mr.*_*r.H 12
这个答案是对现有两个答案的补充.我的目的是展示@tmpearce和@bobobobo的解释如何归结为同样的事情,同时为那些仅仅想要复制最适合他们情况的方程式的人提供快速答案.
@tmpearce在答案中解释了这种方法.
给定平面上具有正常n和点o的平面的点正常定义,可以通过以下方式找到作为最接近给定点p的平面上的点的点p ' :
1)p '= p - (n ·(p - o))*n
@bobobobo在回答中解释了这种方法.
给定由法线n和标量d定义的平面,点p ',即最接近给定点p的平面上的点,可以通过以下方式找到:
2)p '= p - (n · p + d)*n
相反,你有一个平面的点正常定义(平面由平面上的法线n和点o定义)@bobobobo建议找到d:
3)d = - ñ ⋅ ö
并将其插入等式2中.这得到:
4)p '= p - (n · p - n · o)*n
仔细研究方程式1和4.通过比较它们,你会发现方程1使用n ·(p - o),其中方程式2使用n · p - n · o.这实际上是写下同一件事的两种方式:
5)n ·(p - o)= n · p - n · o = n · p + d
因此,人们可以选择将标量d解释为"预先计算".我将解释:如果一个平面的n和o是已知的,但是o仅用于计算n ·(p - o),我们也可以用n和d定义平面,然后计算n · p + d,因为我们刚刚看到那是一回事.
另外,使用d进行编程有两个好处:
val*_*ldo 10
仅提供平面原点和法向量是不够的.这确实定义了3d平面,但是这并没有定义平面上的坐标系.
认为您可以围绕法线向量围绕其原点旋转平面(即将法线向量放在原点并"旋转").
但是,您可以找到投影点到原点的距离(显然对旋转不变).
从3d点减去原点.然后用正常方向做一个十字产品.如果您的法向量被归一化 - 结果向量的长度等于所需的值.
编辑
完整的答案需要额外的参数.比如说,您还提供了表示飞机上x轴的矢量.所以我们有向量n和x.假设他们已经正常化了.
原点用O表示,你的3D点是p.
那么您的观点将通过以下方式进行预测:
x =(p - O)点x
y =(p - O)点(n交叉x)
| 归档时间: |
|
| 查看次数: |
72991 次 |
| 最近记录: |