|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Kirill Volkov 2:5024/15.50 25 Jun 2002 22:58:44 To : Victor Tamarovsky Subject : RE:Need Help. --------------------------------------------------------------------------------
RE:Need Help..
Здравствуй, Victor Tamarovsky !
AL>> Задача: Выбрать произвольно точку на экране, и определить в какой
AL>> именно из фигур находится эта точка. С прямоугольными фигурами всё
AL>> просто, а вот с многогранниками так ни чего и не придумал.:-(
AL>> Заранее благодарю, за возможные варианты, Паскаль приветствуется.
VT> заводишь массив, pазмеpом с экpан. Во вpемя pисования многогpанника
VT> одновpеменно заносишь его номеp в этот массив. Дальше все пpосто :-)
У меня есть карта 65535 * 65535 точек. Все объеты векторы. Я щелкаю по карте.
Как определить, на какой объект я попал? Таскать такой битмап не рационально.
Значит, требуется определить, входит ли данная точка в данный многоугольник. Ты
предлагал определять, какому многоугольнику принадлежит точка сразу, в моем
случае придется проверить для каждого отдельно.
Идея состоит в том, что через заданную точку параллельно оси ОХ проводим прямую
и считаем число пересечекний оной со сторонами многоугольника. Если четное число
- то точка снаружа, если нечетное - то внутри. Отдельно рассматривается случай,
если прямя проходит через вершину многоугольника. Логично в этом случае, как
правило, считать пересечение с вершиной как пересечение с двумя сторонами.
То же самое справедливо и для оси ОУ. Если точка по обоим осям "лежит внутри",
то, значит, она принадлежит многоугольнику.
Работа по обработке намного ускоряется, если для каждого многоугольника задать
ограничивающий его прямоугольник со сторонами, параллельными осям координат. В
этом случае заведомо неправильные варианты можно отбросить, не выполняя
вычислений, которые к тому же не факт, что окажутся целочисленными.
Всего наилучшего, Волков Кирилл, Россия, Владимир.
Mailto: VolkovK@chat.ru форвардинг в ФИДО
KAVolkov@Mail.ru InterNet
--- FIPS/2000
* Origin: Хочешь девyшкy? - обломись! Sharing violation!... (2:5024/15.50)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/32893d18bd64.html, оценка из 5, голосов 10
|