检查鼠标是否在圆圈上 - Java

时间:2015-06-19 16:00:04

标签: java jframe coordinates actionlistener

我有一个数组,其中小圆心的坐标具有相同的半径。我知道当鼠标在圆圈上时如何找到,但我的数组很大,我想要以最快的方式计算这个操作。

有没有办法找到鼠标是否在圆圈上而没有为鼠标的每次移动循环所有数组?

3 个答案:

答案 0 :(得分:1)

最初,设置一些区域'为了更快地参考:

  • 将整个表面分成少数不相交的矩形。
  • 对于每个矩形,列出至少部分包含在其中的所有圆圈。 (一个圆圈可能最终以多个矩形列出,但没关系。)

每当你想检查鼠标是否在圆圈上时,你就不必经历整个圆圈阵列。代替:

  • 找出你所在的矩形。
  • 仅检查该矩形下列出的圆圈。

答案 1 :(得分:1)

这看起来像是优化大量项目的边界检查的问题。对于成千上万的圈子来说,线性化的方法并不能很好地扩展。

这是一个在网上阅读的好主题。但首先,如果不去那里,我会尝试解释(作为练习)我会探索的内容。我会创建一个二叉树并对空间进行分区,然后我会将圆点放在这样的树中而不是使用数组。查看更接近实际X,Y位置的树元素成为在树上进行二分搜索的问题。由于该搜索,您具有最接近的点,并且可以检查其上的碰撞。该算法还有很多工作要做,还需要进一步的优化。例如,如何检查更多点而不仅仅是最后一点?我可能需要一个树用于X坐标,另一个用于Y坐标等等......但我会探索这些想法。我将回到这篇文章,并通过一个实际的例子和一个更具体的解决方案扩展我的回复。

答案 2 :(得分:0)

如果检查距鼠标r(半径)距离的坐标怎么办?然后,如果订购,您可以在数组中缩小搜索范围。