Geometry 围绕点的三角形点

Geometry 围绕点的三角形点,geometry,Geometry,我已经给出了平面上1000个三角形的坐标(三角形编号(T0001-T1000)及其坐标(x1,y1)(x2,y2),(x3,y3))。现在,对于给定的点P(x,y),我需要找到一个包含点P的三角形 一种选择可能是检查所有三角形并找到包含p的三角形。但是,我正在寻找解决此问题的有效方法。在程序执行期间,您必须在某个点检查每个三角形。很明显,对吧?如果希望最大限度地提高计算效率,那么需要创建某种缓存数据结构。数据结构的详细信息取决于您的应用程序。例如:三角形多久改变一次?您需要多久计算一次点的位置

我已经给出了平面上1000个三角形的坐标(三角形编号(T0001-T1000)及其坐标(x1,y1)(x2,y2),(x3,y3))。现在,对于给定的点P(x,y),我需要找到一个包含点P的三角形


一种选择可能是检查所有三角形并找到包含p的三角形。但是,我正在寻找解决此问题的有效方法。

在程序执行期间,您必须在某个点检查每个三角形。很明显,对吧?如果希望最大限度地提高计算效率,那么需要创建某种缓存数据结构。数据结构的详细信息取决于您的应用程序。例如:三角形多久改变一次?您需要多久计算一次点的位置

制作缓存的一种方法是:将平面划分为有限的长方体网格。对于网格中的每个长方体,存储可能与长方体相交的三角形列表


然后,当你需要找出你的点在哪个三角形中时,你首先要找出它在哪个框中(这将是O(1)次,因为你只需查看坐标),然后查看该框的三角形列表中的三角形。

可以通过几种不同的方式搜索你的三角形。我会从消除不可能开始

为每个三角形找到一个左下角,并消除位于点上方和/或右侧的任何三角形。继续搜索其他三角形,应删除绝大多数原始三角形

利用剩下的内容,使用极坐标系根据角点和点之间的角度收集其余所需信息(java确实有一些工具,我不知道其他语言)


有些东西要看的是凸包(不同但有些帮助)、伯努利三角形,有些排序方法可能会有帮助。

你的三角形重叠吗?P可以在多个三角形中吗?那你想要什么?我们是在处理一个无限平面吗?还是有界?@dkamins:不,那些三角形没有重叠。不,P将始终在一个三角形内。@vcsjoines:它是有界的。事实上,我有一个形状(手骨),为了进行一些计算,我需要把它分成几个小三角形。你能详细地给我一些图表吗?我不能理解这一点。