在固定的z轴上简单的线平面交点?

时间:2011-05-26 13:22:58

标签: c++ algorithm math line-intersection

如果我知道平面总是在同一个z轴(因此它不能旋转),以及它的宽度/高度是什么,并且是否有快速检查平面中我的线将相交的位置是无限的?另外,我的“线”实际上不是一条线,而是一个三维矢量,所以“线”可以达到无限距离。

以下是依赖两点的代码: (p1和p2是该行的起点和终点.plane_z =平面所在的位置)

k1 = -p2.z/(p1.z-p2.z-plane_z);
k2 = 1.0f-k1;
ix = k1*p1.x + k2*p2.x;
iy = k1*p1.y + k2*p2.y;
iz = plane_z; // where my plane lays

另一个使用向量的解决方案(我使用两个点作为第一个例子,“p2.x-p1.x”等是矢量计算):

a = (plane_z-p1.z)/(p2.z-p1.z);
ix = p1.x + a*(p2.x-p1.x);
iy = p1.y + a*(p2.y-p1.y);
iz = plane_z;

编辑3:添加了Orbling的解决方案,该解决方案稍微快一点,并且不一定依赖两点。

1 个答案:

答案 0 :(得分:3)

您可以实施像http://paulbourke.net/geometry/planeline/那样的前沿解决方案,然后应用您的简化。在代数解(#2)中,A和B在你的情况下是零(如果我理解正确的话)

  

平面始终位于同一z轴(因此无法旋转)

注意:你的线应该是一个点和一个方向,还是两个点?