假设我们定义一个点为三个浮点数的元组,而四面体定义为四个点的元组。
假设我们有一个四面体和一个点,我们可以根据How to check whether the point is in the tetrahedron or not?中描述的解确定这个点是否属于四面体,其关键思想是确定该点是否位于四面体四面体的四面体的内侧。
我的问题,给出一个点,N个四面体,其中N是大约700万,我需要确定在哪个四面体点是。我们将关心做重复测试的性能,有大量的分数。
更多信息:
模拟的空间中没有“洞”。
,
。
对这个问题有什么有效的解决办法吗?在解决这个问题方面,Python是首选。
谢谢!
发布于 2020-09-16 21:48:26
如果你计划在同一组四面体上测试很多点,我肯定会用预处理的步骤来构建四面体的空间结构。
在我的评论中,我提到了八进制,但知道四面体填充了空间(没有洞),我认为没有必要对空间进行自适应细分,最好将其划分为相等的部分。
SpaceBoxes).
SpaceBox,保存一个四面体列表,这些四面体与box.
现在,具有这样的空间结构:
需要测试的点,p
tetrahedron
SpaceBox O(1)
SpaceBox碰撞,所以这些都是测试
p与每个SpaceBox的包围盒的碰撞,然后再用四面体自身H 226F 227注意,测试的性能主要取决于每个SpaceBox中四面体的数量。
假设一个空间是一个立方体:
SpaceBoxes
having 将每条边细分为16部分,得到16^3 = 4096 N= 7000000,大约有1709个候选四面体测试。此外,在实现方面,预处理和测试多个点看起来都是数据并行问题,因此多处理可能会有所帮助。
发布于 2022-08-10 23:02:02
将四面体放入三维R-树,使它们的包围盒成为键,而四面体本身就是值。在这一点上查询R树。然后用四面体点检查测试查询返回的每个结果值。
使用R树(或类似结构)的好处是,如果四面体不改变,您可以构建R树一次并测试多个点。
https://stackoverflow.com/questions/63909218
复制相似问题