Я работаю над графическим интерфейсом. Графический интерфейс состоит из карты с городами. В каждом городе есть координата X и Y. Города сохраняются в HashMap, как следующее:Поиск по координатам HashMap
cities.put(new Coordinates(X, Y), "City Name");
где X и Y являются лишь некоторыми целыми числами, которые представляют среднюю точку города. Как и в случае, если вам нужно обозначить город кругом, X и Y будут представлять центр этого круга.
У меня нет проблем с получением координат щелчка мыши. Однако моя проблема заключается в том, что я не знаю, как искать через HashMap и получить ближайший город. Ни один человек не сможет отлично нажать на конкретный X и конкретную координату Y. Поэтому я должен разрешить, например, + - 15.
У вас есть города, обозначенные кружком радиуса 15 в положении x, y. Я предполагаю, что существует предположение, что круги не пересекаются, иначе есть другое правило для определения уникальности. Затем ваш вопрос становится «находится ли этот пункт в этом круге», на который ранее был дан ответ (http://stackoverflow.com/questions/481144/equation-for-testing-if-a-point-is-inside-a-circle). Вероятно, есть стратегии, которые можно было бы использовать для определения потенциальных кандидатов, но я ожидаю, что они будут зависеть от ваших данных и от того, как они распределяются. – Romski
Вы можете обнаружить, что ни один из встроенных типов не подходит для вашего запроса. Я подозреваю, что один из [пространственных деревьев] (http://en.wikipedia.org/wiki/Template:CS_trees) может быть лучшим инструментом, хотя я недостаточно знаком с этой областью структур данных, чтобы сказать «да , это тот "и дать окончательный ответ. –
Существует отличная статья о vp-деревьях с образцом кода (в C++ хотя) [здесь] (http://stevehanov.ca/blog/index.php?id=130), который выглядит точно так, как будто это ваш поиск. – Oncaphillis