Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.01.25;
Скачать: [xml.tar.bz2];

Вниз

Геометрия, помогите освежить...   Найти похожие ветки 

 
Ламо777 ©   (2008-12-01 09:16) [0]

Здравствуйте.

Напомните, как найти принадлежность точки некоей линии
на плоскости. К примеру, есть ломаная, заданная точками
(1,1), (5,20), (15.7) и т.д.

Нужно при наведении мыши на эту линию - подсвечивать ее, и вытаскивать доп. информацию по ней.
Как я понимаю, в данном случае на канве нет точек, явно принадлежащих линии - есть только точки, лежащие более или менее близко к ней. Как определить, что точка условно "принадлежит" ломаной?

))) Самому стыдно за такие тупые вопросы, это ж школьная программа. Кто помнит ключевые слова, или раздел геометрии с решением - пните плиз... А то что-то не могу найти в инете, а Погорелова под рукой нет(там вроде была такая задача).

ЗЫ: пишу на AS 3, если кто-то знает более простые способы решения - буду очень благодарен.


 
wal ©   (2008-12-01 09:29) [1]

www.nuru.ru/mat/geom/011.htm


 
Григорьев Антон ©   (2008-12-01 09:56) [2]

Обычно это делается с помощью траекторий и регионов. Рисуете вашу ломаную между функциями BeginPath/EndPath, чтобы получить из неё траекторию (рисовать придётся "туда" и "обратно", потому что траектория должна быть замкнутой), потом при необходимости с помощью WidenPath расширяете траекторию, чтобы можно было тыкать мышкой не строго в линию, а чуть-чуть не попадать, потом превращаете траекторию в регион (функция PathToRegion), потом с помощью PtInRegion можно определить, попала точка в регион или нет. Достоинство метода - он годится не только для отрезков и ломаных, но и для фигур любой формы.


 
Сергей М. ©   (2008-12-01 09:57) [3]

Точку С можно считать "условно принадлежащей" отрезку ломаной AB, если сумма расстояний от точки С до точек А и B не превышает заданной величины delta.
В цикле по всем отрезкам ломаной для каждого отрезка вычисляется эта сумма.
Результаты > delta отбрасываются из рассмотрения.
Среди оставшихся ищется минимальный.


 
Сергей М. ©   (2008-12-01 10:01) [4]

Что-то я наплел)..

Точку С можно считать "условно принадлежащей" отрезку ломаной AB, если сумма расстояний от точки С до точек А и B превышает длину отрезка АB на величину не большую delta.


 
Труп Васи Доброго ©   (2008-12-01 10:01) [5]

Я думаю самый логичный подход (со стороны геометрии) это проверять на принадлежность точки отрезку, который входит в ломаную. Перебором по всем отрезкам ломаной. Это если линия не нарисована. Если же ломаная нарисована, то проще проверять на соответствие цвета канвы под курсором цвету линии, тут и геомертия нафиг не нужна.
А принадлежность точки отрезку проверяй как тебе больше нравится. Хоть расстояния складывай, хоть площать треугольника вычилсляй, да полно способов.


 
Anatoly Podgoretsky ©   (2008-12-01 10:41) [6]

> Ламо777  (01.12.2008 9:16:00)  [0]

Для прямых можно использовать LineDDA, возможен не точный поиск.


 
Ламо777 ©   (2008-12-01 13:01) [7]

Нашел решение этой и другой ((не)вхождение точки в многоугольник) задачи
на http://alglib.sources.ru/.

Всем откликнувшимся - спасибо большое.

ЗЫ: модераторы, не сочтите за рекламу, просто ресурс понравился))


 
int64   (2008-12-01 14:58) [8]

Я рисовал параллельно все примитивы (линии, полигоны, текст, комбо...) на виртуальном битмапе цветом ИД примитива. Соответственно, чтобы "усилить" возможности поиска по MouseMove, линии рисовал толще, чем на оригинале; на углах рисовал элипсы (чтоб фигуры мышкой менять). Зная позицию курсора на оригинальной канве, по цвету из виртуальной получаешь ИД. Без всякой алгебры.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2009.01.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
2-1228831692
ther
2008-12-09 17:08
2009.01.25
редактирование ListView


2-1229339493
smartleds
2008-12-15 14:11
2009.01.25
Подскажите плз как массив TrackBar-ов поместить в ScrollBox?


15-1228307064
desc
2008-12-03 15:24
2009.01.25
Кто реализовывал автоматическое считывание данных


2-1229005474
TNT
2008-12-11 17:24
2009.01.25
ShellExecute(HWND,Null,SP,Null,Null,SW_SHOWNORMAL);


8-1189679198
master_asasin
2007-09-13 14:26
2009.01.25
Форма окна по картинке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский