如果我知道平面始终位于同一 z 轴(因此它不能旋转)及其宽度/高度,那么有什么方法可以快速检查我的线将在平面中相交的位置是无限的?另外,我的“线”实际上不是一条线,而是一个 3d vector ,因此“线”可以延伸到无限远。
下面是依赖两点的代码: (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
另一个使用 vector 的解决方案(我也像第一个例子一样使用两个点,“p2.x-p1.x”等是 vector 计算):
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;
Edit3: 添加了 Orbling 的解决方案,速度稍快,并且不一定依赖于两点。
最佳答案
您可以像那里那样实现一个直截了当的解决方案 http://paulbourke.net/geometry/planeline/ ,然后应用您的简化。在代数解 (#2) 中,A 和 B 在你的情况下为零(如果我理解正确的话)
plane is always in the same z-axis (so it cannot be rotated)
注意:你的线应该是一个点和一个方向,还是两个点对吧?
关于c++ - 固定 z 轴上的简单线平面相交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6139190/