【发布时间】:2015-09-25 13:13:43
【问题描述】:
我有一个显示世界及其海岸线的网格。此处显示了英国周边地区的摘录
从海洋中任何地方的任意原点,我想找到那些在原点视线范围内的海岸线点,而不必越过另一个海岸线点。例如,如果原点位于英国西部,我希望获得爱尔兰西部和英国西部的许多海岸线点,但不会来自丹麦,因为它被英国“覆盖”。
我需要一种快速算法的建议,该算法可以“射出”光线并检测这些光线穿过第一条海岸线的位置(海岸线地图以二进制格式提供)。
或者,我可以想象沿着所有海岸线像素移动,在原点和海岸线点之间建立连接线,并检查连接线上是否没有其他海岸线点。是否有任何算法可以有效地完成对海岸线穿越的检查?
我意识到这个问题是一个未知数,但也许有聪明的人在这方面有知识。非常感谢任何帮助。
【问题讨论】:
-
也许你应该把这个问题发到cs.stackexchange.com
-
如果您采用this answer 并以有效的方式存储所有边(例如,将地图划分为一个网格并为每个框存储边(相交)它),您可以检查哪些框光线进入,以及它与该框中的哪些线段相交。如果您从射线的原点开始,您可以简单地按顺序选中它通过的框(如果同一框中有多个交叉点,您可能需要检查哪个线段最接近射线的原点)。
-
当您说海岸线存储为“二进制格式”时,您的意思是它存储为光栅图像吗? (即二维像素数组)将海岸线存储为矢量图像(线段列表)更为常见。根据答案,算法会有所不同(准确性也会有所不同)。
-
嗨 Sam 和 Anna,感谢您的 cmets。 “拳击”的想法听起来很有趣,好像它会提高效率。我会再考虑一下。安娜,二进制格式,我的意思是我有一个二维像素数组,值为 1(=海岸线)和 0(=无海岸线)。我很想听听你的想法。
-
您能否具体说明“快速”是什么意思以及在什么硬件上?有多种方法可能在速度和复杂性上有所不同,但如果一些基本的东西可以做,那么创建一个过于复杂的解决方案是没有意义的。另外,你的地图分辨率是多少?
标签: python python-2.7 numpy scipy raytracing