我正在开发一个 GUI 应用程序。 GUI 由带有城市的 map 组成。每个城市都有一个 X 和一个 Y 坐标。城市存储在如下所示的 HashMap 中:
cities.put(new Coordinates(X, Y), "City Name");
其中 X 和 Y 只是代表城市中点的一些整数。就像您必须用一个圆圈标记一个城市一样,X 和 Y 将代表该圆圈的中心。
我很容易获得鼠标点击的坐标。但是我的问题是我不知道如何搜索 HashMap 并获得最近的城市。没有人能够完美地点击特定的 X 和特定的 Y 坐标。所以我必须允许 +- 15。
最佳答案
将您的 map 划分为一个网格,以便可以从网格内的一个点计算出任何网格正方形的左上角坐标。
例如,如果 map 为 100 x 100,并且您希望它包含 10 个网格方 block 乘以 10 个网格方 block ,则任何网格方 block 的左上角坐标为:
top = y - y%10;
left = x - x%10;
那么,您的 map 将是:
Map<Coordinates, City>
其中 City
是一个包含城市名称和实际坐标(不是网格坐标)的对象。
当你想找到附近的城市时,计算点击位置的网格坐标,并将其用作 map 的键。
如果您在一个网格中有多个城市,您的 map 的值将需要是一个 City
对象的列表。
编辑:这也可以通过使用网格数学的类似原理对 Coordinates
类的 hashcode 和 .equals()
方法进行一些欺骗来解决。
关于java - 通过 HashMap 坐标搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26856336/