c++ - 固定 z 轴上的简单线平面相交?

标签 c++ algorithm math line-intersection

如果我知道平面始终位于同一 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/

相关文章:

c++ - 在 extern "play"声明中使用参数常量对 "C"是否安全?

c++ - 无法让谷歌测试工作

algorithm - 神经网络的层和神经元

algorithm - 我可以确定性地对任意排列的 float 的向量求和吗?

java - 需要 java double 才能不向下舍入

c# - 寻找 .NET 数学方程式编辑器和求解器控件

C++ 复制构造函数和 = 运算符重载

c++ - 对头文件稍作修改是否需要重新编译第三方库

algorithm - 如何在 block 排序中对数组后缀进行排序

java - 返回低于平均值的数字数量