提前抱歉,我正在努力解释一下这个...... :)
基本上,我有一个典型的窗口坐标系统(顶部,左边是0,0).如果任何人熟悉hasrsine查询,就像在SQL中一样,它可以根据纬度和经度坐标获得半径内的所有点.
我需要一些更简单的东西,但我的数学技能并不是一成不变的!基本上,我有大约600x400空间分散的随机点.我需要,对于地图上的任何X,Y点,运行查询以确定在该点的给定半径内有多少其他点.
如果那不够描述,请告诉我!
直截了当的方法:
您可以使用毕达哥拉斯定理计算点到点之间的距离:
deltaX = x1 - x2 deltaY = y1 - y2 distance = square root of (deltaX * deltaX + deltaY * deltaY)
给定点x1,y1
,对每个其他点(x2,y2
)执行此操作,以查看计算的距离是否在半径范围内(小于或等于).
如果你想让它更快,计算和存储半径的平方,只需比较(deltaX * deltaX + deltaY * deltaY)
,避免平方根.
在做毕达哥拉斯之前,你还可以快速消除任何落在广场之外的可以完全包含目标圆的点.
// Is (x1, y1) in the circle defined by center (x,y) and radius r bool IsPointInCircle(x1, y1, x, y, r) { if (x1 < x-r || x1 > x+r) return false; if (y1 < y-r || y1 > y+r) return false; return (x1-x)*(x1-x) + (y1-y)*(y1-y) <= r*r }