Cyp*_*106 2 c++ algorithm visual-c++
提前抱歉,我正在努力解释一下这个...... :)
基本上,我有一个典型的窗口坐标系统(顶部,左边是0,0).如果任何人熟悉hasrsine查询,就像在SQL中一样,它可以根据纬度和经度坐标获得半径内的所有点.
我需要一些更简单的东西,但我的数学技能并不是一成不变的!基本上,我有大约600x400空间分散的随机点.我需要,对于地图上的任何X,Y点,运行查询以确定在该点的给定半径内有多少其他点.
如果那不够描述,请告诉我!
Ate*_*ral 12
直截了当的方法:
您可以使用毕达哥拉斯定理计算点到点之间的距离:
deltaX = x1 - x2
deltaY = y1 - y2
distance = square root of (deltaX * deltaX + deltaY * deltaY)
Run Code Online (Sandbox Code Playgroud)
给定点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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2134 次 |
| 最近记录: |