我在平面上给出了1000个三角形的坐标(三角形数(T0001-T1000)及其坐标(x1,y1)(x2,y2),(x3,y3))。现在,对于给定的点P(x,y),我需要找到一个包含点P的三角形。
一个选项可能是检查所有三角形并找到包含P的三角形。但是,我正在寻找有效解决此问题的方法。
答案 0 :(得分:2)
在执行程序期间,您必须检查某些点的每个三角形。这显然是对的吗?如果要最大化此计算的效率,那么您将创建某种缓存数据结构。数据结构的详细信息取决于您的应用程序。例如:三角形的变化频率如何?您需要多久计算一个点的位置?
制作缓存的一种方法是:将您的飞机划分为有限的网格框。对于网格中的每个框,存储可能与框相交的三角形列表。
然后,当你需要找出你的点在哪个三角形内时,你首先会找出它所在的盒子(这将是O(1)时间因为你只是看坐标)然后看看该框的三角形列表中的三角形。
答案 1 :(得分:0)
您可以通过几种不同的方式搜索三角形。我首先要消除不可能性。
找到每个三角形的最左下角,并消除点上方和/或右侧的任何位置。继续搜索其他三角形,你应该消除绝大多数原始三角形。
拿走你剩下的东西并使用极坐标系统根据角点和点之间的角度收集剩下的所需信息(java确实有一些工具,我不知道其他语言)。 / p>
有些事情要看凸壳(不同但有些帮助),Bernoullies三角形以及一些排序方法可能会有所帮助。