找到包含球体上点的三角形

计算科学 插值
2021-12-13 00:31:57

假设我有一个球体网格(球体上的点和三角剖分)。

什么是找到包含球体上一个点的三角形(该点不需要是三角剖分节点)的一种好的和有效的方法?如果可以将操作向量化,以提高 Matlab 速度,那就太好了。

这样做的目的是在球体上构造一个简单的球面(线性)插值算子。

2个回答

查找给定坐标点可能所在的元素的通用方法是将它们分类为四叉树(3D 中的八叉树)。树的叶子将仅包含与给定坐标范围相交的元素(在您的情况下,这可能是(θ,ϕ)),每个叶子的元素数保持小于一个足够小的常数n(大约10到20),并在所有这些上进行点是否属于元素的测试。这给出了订单成本n+log(N/n)N-元素三角剖分。

如果您的问题是关于如何以最佳方式测试该点是否属于三角形,请明确说明。

在球体的情况下,在三角形离等边不远的情况下,有一种简单且计算效率高的方法(感谢评论中的更正)。假设我们正在处理单位球体,所以球体的中心在原点。然后为了找到包含某个点的三角形P我们构造每个三角形的外法线并搜索与向量成最小角度的法线OP. 对应于最近法线的三角形将包含该点。