Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > определение области


Автор: Evghenusi 11.8.2014, 21:42
Доброго времени суток.
Задача наверно окажется на уровне 5 класса, но я не могу её решить  smile 

Нужно определить над какой областью находится курсор мыши.
У области 4 координаты (может и больше, но давайте разберёмся с 4  smile )
Координаты области могут задаваться в любом направлении, по часовой стрелке или против.
У курсора соответственно тоже есть кординаты.

Дабы проще было понять о чём речь, представим карту дачных участков.


Пробовал все координаты сравнивать с "мышиными", если одни больше других, записывать кол-во в счётчик.
Идея была такая, что если полученное значение будет меньше 1 или больше (кол-ва - 1) координат области, значит курсор за областью участка, иначе мы нашли область.
Но идея оказалась глупой.

Что ещё придумать, не знаю.

Автор: Pavia 11.8.2014, 22:01
Evghenusi, 
http://www.rsdn.ru/Info/Howtoask.xml

Автор: Evghenusi 11.8.2014, 22:50
Pavia, спс) список прочёл, промах обнаружил.


Ребята, помогите пожалуйста.
Благодарен вам даже за то что заглянули в тему, а не прошли мимо.

Добавлено через 5 минут и 9 секунд
http://jsfiddle.net/13ruvnuv/

Автор: Dremuk 12.8.2014, 10:09
НЕ совсем понятен вопрос. Дайте больше конкретики или пример какой-нибудь графический

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/opredeleniye-oblasti-id53e90f2fae201538468b4567#findElement_E7045_53e9bdafae2015e241b41760_0

Автор: Evghenusi 12.8.2014, 21:53
Хочу сделать карту с участками, которые будут выделяться при наведении на них курсора/стрелки мыши.
Щас событие "onclick" (ссылка на пример выше) , в планах "onmousemove", Но не в этом суть!

Я не знаю как проверять координаты, поэтому и прошу у вас помощи, может натолкнёте на путь истинный.

Своё виденье описал словами и показал кодом.

Так же мне посоветовали координаты проверить и определить крайнюю левую точку и от неё шагать .... это я к -
Цитата
Координаты области могут задаваться в любом направлении, по часовой стрелке или против.


Так же советуют разобрать карту гугла, а именно искать "Poligon" в API , только я боюсь утону.

Автор: Dremuk 12.8.2014, 22:17
в чем делаете это?

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/opredeleniye-oblasti-id53e90f2fae201538468b4567#findElement_E7045_53ea6831ae20152131b41d4f_0

Автор: Evghenusi 12.8.2014, 22:26
язык? JavaScript
Вот только загвоздка не в языке, а рациональном мышлении, поэтому я и заглянул в этот раздел)

Автор: baldina 12.8.2014, 23:11
Evghenusi, 
строите отрезок, пересекающий экран, например с координатами {(0,0),(mouseX,mouseY)}
для каждой области (которая на самом деле есть многоугольник) проводите https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D0%BF%D1%80%D0%B8%D0%BD%D0%B0%D0%B4%D0%BB%D0%B5%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%82%D0%BE%D1%87%D0%BA%D0%B8_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%83%D0%B3%D0%BE%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA%D1%83 на попадание мыши в неё:
подсчитываете число пересечений этого отрезка с отрезками, ограничивающими область. если число пересечений нечетное, значит мышь внутри.
особый случай - попадание мыши точно в вершину, но для вашей задачи думаю это не важно

Автор: baldina 13.8.2014, 00:00
http://jsfiddle.net/dzqzLbwm/

Автор: Evghenusi 13.8.2014, 00:07
нуууу, зачем код, я сам хотел.
Ладно, сначала сам поковыряю, если не получится загляну.

baldina, спасибо

Автор: AVA12 14.8.2014, 12:07
Возможно, ответ не в тему, но если нужно реализовать карту в HTML-документе, то для этого есть теги <map> и <area>. Никаких хитрых алгоритмов, можно на каждую область навесить свои обработчики событий :)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)