固定z轴上的简单线平面交点
Simple line-plane intersection on a fixed z-axis?
如果我知道平面总是在同一个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;
Edit3:添加了Orbling的解决方案,该解决方案稍微快一点,不一定依赖于两点。
您可以实现这样的海峡式解决方案http://paulbourke.net/geometry/planeline/,然后应用您的简化。在代数解(#2)中,A和B在你的情况下是零(如果我正确理解这句话)
平面总是在同一个z轴上(因此不能旋转)
注意:你的线应该是一个点和一个方向,还是两点对吧?
相关文章:
- 在c++中用vector填充一个简单的动态数组
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的简单if-else语句是如何无法访问的代码
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 一种在C++中读取TXT配置文件的简单方法
- 关于简单C++函数(is_palindrome)的逻辑的问题
- 显示错误输出的简单数组排序程序
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 退出简单while循环时出现问题
- 为什么简单的算术减法在"if"条件下不起作用?
- C++-字符串是否包含一个带有简单循环的单词
- 关于 c++ 函数中指针赋值的简单问题
- 从函数返回任意简单类型的数据
- 如何在没有函数的情况下编写此代码并使C++更简单?
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 如何使用 samtools C API 构建一个简单的主.cpp文件
- 固定z轴上的简单线平面交点