如何确定 3-D 射线穿过的第一个三角形(一组三角形中)?
Posted
技术标签:
【中文标题】如何确定 3-D 射线穿过的第一个三角形(一组三角形中)?【英文标题】:How to determine the first triangle (out of a set of triangles) passed through by a 3-D ray? 【发布时间】:2021-11-22 17:17:45 【问题描述】:我正在尝试在 Python 中解决以下问题。当我使用有限元方法时,问题来自图像处理问题。
在我的问题中,我有一组三角形和一条射线。每个三角形由三个 3-D 点组成,射线是 3-D 点和 3-D 矢量的形式。如何确定光线穿过的第一个三角形?现在我什至没有这个算法。任何意见将不胜感激。
【问题讨论】:
这不是一个数学问题而不是一个编码问题吗?基本上,您需要做的就是计算矢量与三角形跨越的二维平面相交的位置。建议你去数学论坛问问。一旦你知道该做什么,实施应该不会太难。 不确定你的输入和输出是什么,但这个问题听起来像是光线追踪/光线投射的基本概念,所以也许你想阅读更多关于光线跟踪/投射的信息,你甚至可以制作使用现有的图形软件/硬件为您完成。 【参考方案1】:我要做的第一件事是平移整个数据集,减去 3D 射线原点。然后旋转数据集,使射线的 3D 矢量与 X 轴对齐。见How to find the orthonormal transformation that will rotate a vector to the x axis?。
现在问题已转换为过滤与 X 轴交叉且 X 坐标为非负的三角形,并在其中找到交叉点具有最小 X 坐标的三角形。所以
对于每个三角形,检查其 平面 与 X 轴相交的位置。见Determine point of interesction of plane with axis given points of plane
然后扔掉交叉点(在 X 轴上)不在三角形边界内的三角形(检查三个边中的每一个,该点是否位于它的“内侧”侧)。见Check whether a point is within a 3D Triangle
丢弃交叉点具有负 X 坐标的三角形。
在剩余的三角形中(真正与 X 轴相交的正侧)中,找到与 X 坐标相交点最小的三角形。
【讨论】:
以上是关于如何确定 3-D 射线穿过的第一个三角形(一组三角形中)?的主要内容,如果未能解决你的问题,请参考以下文章