当前位置:  开发笔记 > 编程语言 > 正文

(C++)需要使用reg来计算半径内的所有点.2D窗口坐标.系统

如何解决《(C++)需要使用reg来计算半径内的所有点.2D窗口坐标.系统》经验,为你挑选了2个好方法。

提前抱歉,我正在努力解释一下这个...... :)

基本上,我有一个典型的窗口坐标系统(顶部,左边是0,0).如果任何人熟悉hasrsine查询,就像在SQL中一样,它可以根据纬度和经度坐标获得半径内的所有点.

我需要一些更简单的东西,但我的数学技能并不是一成不变的!基本上,我有大约600x400空间分散的随机点.我需要,对于地图上的任何X,Y点,运行查询以确定在该点的给定半径内有多少其他点.

如果那不够描述,请告诉我!



1> Ates Goral..:

直截了当的方法:

您可以使用毕达哥拉斯定理计算点到点之间的距离:

deltaX = x1 - x2
deltaY = y1 - y2
distance = square root of (deltaX * deltaX + deltaY * deltaY)

给定点x1,y1,对每个其他点(x2,y2)执行此操作,以查看计算的距离是否在半径范围内(小于或等于).

如果你想让它更快,计算和存储半径的平方,只需比较(deltaX * deltaX + deltaY * deltaY),避免平方根.



2> Eclipse..:

在做毕达哥拉斯之前,你还可以快速消除任何落在广场之外的可以完全包含目标圆的点.

// 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
}

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有