4

我正在开发一个 GUI 应用程序。GUI 由带有城市的地图组成。每个城市都有一个 X 和一个 Y 坐标。城市存储在 HashMap 中,如下所示:

cities.put(new Coordinates(X, Y), "City Name");

其中 X 和 Y 只是代表城市中点的一些整数。就像您必须用圆圈标记一个城市一样,X 和 Y 将代表该圆圈的中心。

我可以轻松获得鼠标点击的坐标。但是我的问题是我不知道如何通过 HashMap 搜索并获得最近的城市。没有人能够完美地点击特定的 X 和特定的 Y 坐标。所以我必须允许像 +- 15。

4

1 回答 1

1

将您的地图划分为一个网格,以便可以从网格内的一个点计算任何网格正方形的左上角坐标。

例如,如果地图为 100 x 100,并且您希望它包含 10 个网格正方形乘以 10 个网格正方形,则任何网格正方形的左上角坐标为:

top = y - y%10;
left = x - x%10;

然后,您的地图将是:

Map<Coordinates, City>

whereCity是一个包含城市名称和真实坐标(不是网格坐标)的对象。

当您想找到附近的城市时,计算单击位置的网格坐标,并将其用作地图的键。

如果网格中有多个城市,则地图的值需要是City对象列表。

编辑:这也可以通过使用类似的网格数学原理对类的哈希码和.equals()方法进行一些技巧来解决。Coordinates

于 2014-11-11T02:11:44.393 回答