我正在寻找一种算法,我可以创建地理围栏并检查设备是否正在进入/离开围栏。我已经看过多边形算法(光线投射和绕组数),但是有没有算法可以应用于圆形和任何不规则形状?重要的制约因素是时间效率。
谢谢。
答案 0 :(得分:4)
以下是易于理解的c代码算法:
答案 1 :(得分:3)
好的圆圈很容易(至少如果你假设一个局部平坦的表面) - 只是距离一个点的绝对距离。
如果你需要速度,通常的方法是级联,首先检查一个圆,或者围绕点检查一个正方形,然后是凸多边形,然后在必要时检查更详细的多边形。
如何定义不规则形状 - 如果它不是多边形?
ps见How to test if a point is inside of a convex polygon in 2D integer coordinates?
答案 2 :(得分:1)
但最重要的是,出于几何正确性和效率原因,绕组数算法应始终是首选,以确定多边形中包含点。
答案 3 :(得分:1)
我找到了适用于python的解决方案。据我所知,这有效。
import numpy as np
import h5py
with open('test.h5', 'rb') as stream:
with h5py.File(stream, 'r') as f:
ds = f['data']
assert ds.fletcher32, ('Dataset does not have Fletcher-32 checksums')
checksums = np.zeros((ds.id.get_num_chunks(),), dtype=np.uint32)
for i in range(checksums.size):
chunk_info = ds.id.get_chunk_info(i)
offset = chunk_info.byte_offset + chunk_info.size - 4
stream.seek(offset, 0)
checksums[i] = np.frombuffer(stream.read(4), dtype=np.uint32)[0]
谢谢!
答案 4 :(得分:0)
看看四叉树,空间索引,四叉树和r树。