如何使用numpy/scipy计算一个点到N个三角形的最近投影?
现在,我将创建一个函数来计算到单个三角形basically this的投影,然后遍历整个三角形数组。但在开始之前,我想知道scipy中是否已经有了一个解决方案。类似于:
# DREAMY PSEUDOCODE
import numpy as np
N_TRIANGLES = 1000
point = np.random.rand(3) * 100 #random 3d point
triangles = np.random.rand(N_TRIANGLES,3,3) * 100 #array of triangles
from scipy.spatial import pointToTriangles
projections = pointToTriangles(point,triangles)
这里有一张图片可以帮助你想象:
在上图中,中间的红点是我的查询“point”,蓝点是在“triangles”np.array()中定义的每个三角形的顶点。绿色表示我想要的结果。它们是“point”到定义的三角形的最接近的投影,我希望以点的数组的形式得到这些信息。
干杯!
1条答案
按热度按时间u4dcyp6a1#
这是我的代码。我在scipy中找不到任何可以直接帮助我的东西,这个解决方案比查询CGAL快大约2倍。它不处理折叠的三角形,但可以通过检查边长并返回最长边上最近的点来修复。
将100个点投影到10k个三角形的一些测试数据:
这很快就会占用大量内存,所以在处理大数据集时,最好一次迭代一个点或三角形。