我正在开发一个GUI应用程序。 GUI由包含城市的地图组成。每个城市都有一个X和Y坐标。城市存储在HashMap中,如下所示:
cities.put(new Coordinates(X, Y), "City Name");
其中X和Y只是代表城市中点的一些整数。如果您必须使用圆圈标记城市,则X和Y将代表该圆圈的中心。
我可以轻松获取鼠标点击的坐标。但是我的问题是我不知道如何搜索HashMap并获得最近的城市。没有人能够完美地点击特定的X和特定的Y坐标。所以我必须允许像+ - 15。
答案 0 :(得分:1)
将地图划分为网格,以便可以从网格中的某个点计算任何网格方块的左上角坐标。
例如,如果地图是100 x 100并且您希望它包含10个网格方格乘以10个网格方格,则任何网格方格的左上角坐标都是:
top = y - y%10;
left = x - x%10;
然后,您的地图将是:
Map<Coordinates, City>
其中City
是一个包含城市名称和实际坐标的对象(不是网格坐标)。
如果要查找附近的城市,请计算所点击位置的网格坐标,并将其用作地图的关键字。
如果网格中有多个城市,则地图的值必须是City
个对象的列表。
编辑:这也可以通过使用类似的网格数学原理对.equals()
类的哈希码和Coordinates
方法做一些诡计来解决。