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 個のグリッド四角 x 10 個のグリッド四角を含める場合、グリッド四角の左上の座標は次のようになります。

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

次に、マップは次のようになります。

Map<Coordinates, City>

City、都市の名前と実際の座標 (グリッド座標ではない) を含むオブジェクトです。

近くの都市を見つけたい場合は、クリックした位置のグリッド座標を計算し、マップのキーとして使用します。

グリッド内に複数の都市がある場合、マップの値はCityオブジェクトのリストである必要があります。

編集:これは、グリッド数学の同様の原理を使用して、クラスのハッシュコードと.equals()メソッドでいくつかのトリックを行うことによっても解決できます。Coordinates

于 2014-11-11T02:11:44.393 に答える