|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.02.2014, 08:58 | #51 | ||
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Цитата:
Цитата:
Задача Имеем 2-а отрезка заданые 2-ми точками. Надо определить, пересекаются ли эти отрезки и если да, то найти точку пересечения. Рассуждения: Первое: Отрезки пересекаются = Имеется общая точка Общая точка = Точка пересечения Точка пересечения отрезков = Точка пересечения прямых, на которых лежат отрезки Далее Отрезки пересекаются, если выполняются 2 условия: - прямые, на которых лежат отрезки, пересекаются; - координата точки пересечения прямых лежит внутри диапозонов координат (проекций на оси) обоих отрезков. Прямые же пересекаются, если имеют разные углы наклона Окей Имеем 3 задачи: 1. Прямые пересекаются -> tg(ф1) <> tg(ф2) 2. Точка пересечения -> решение системы уравнений 3. Точка внутри отрезна -> X <= max(X1, X2) X >= min(X1, X2) Y <= max(Y1, Y2) Y >= min(Y1, Y2) Ремарка Прикол в том, что прямые пересекаются чуть реже чем всегда, а расчет tg(ф) требует работы с дробями. Поэтому проверять это условие первым не целесообразно. Для отсечения большого куска заведомо непересекающихся пар можно проверить следующие условия: max(X11, X12) >= min(X21, X22) max(Y11, Y12) >= min(Y21, Y22) Далее всё окей. Короче 1. Отсекаем заведомо непересекающиеся пары max(X11, X12) >= min(X21, X22) max(Y11, Y12) >= min(Y21, Y22) 2. Прямые пересекаются k1 = tg(ф1) k2 = tg(ф2) k1 <> k2 3. Координата X точки пересечения f1(x) = f2(x) 4. Точка внутри отрезков X <= max(X11, X12) X >= min(X11, X12) X <= max(X21, X22) X >= min(X21, X22) 5. Координата Y точки пересечения Y := f1(X) Последний раз редактировалось Sibedir; 11.02.2014 в 09:42. |
||
11.02.2014, 09:48 | #52 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Накроил по наводке Serge_Bliznykov (а по его наводке лежит совет от Rin ссылающийся на жж некоего программера на плюсах) программку на сишарпе (правда, "искаропки" там нет векторных операций, пришлось чуть-чуть подпортить код).
Будет полигончик для отработки алгоритмов. Можно навернуть проверку скорости работы даже Последний раз редактировалось phomm; 11.02.2014 в 09:55. |
13.02.2014, 00:56 | #53 | ||
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
phomm, спасибо большое за программку.
Но все-таки это уже дело чести - разобраться. Sibedir, мне уже тут многие приводили кучу непонятных формул, но мало кто попытался что-то объяснить. В таком виде формулы я и в учебниках читаю... Цитата:
Цитата:
Ну и далее по тексту сплошные ф1 и ф2.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
|
||
13.02.2014, 01:08 | #54 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
|
Думаю, Sibedir не обидится, если поясню за него.
ф1 и ф2 - углы наклона 2 данных прямых, на которых лежат отрезки. Угол наклона считается от горизонтальной оси против часовой стрелки. "Откуда они взялись?" - пока не откуда, это просто признак пересечения прямых. x11 и x12 - координаты по x начала и конца первого отрезка (первый индекс - номер отрезка, второй индекс - номер вершины). Правда, на мой взгляд, условий на не пересечение из ремарки не хватает (грубо говоря, это проверка на пересечение двух прямоугольников, описывающих отрезки, а в ремарке рассматривается только частный случай такой проверки, или я как-то не так понял эту ремарку).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
13.02.2014, 02:35 | #55 | |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
Цитата:
Код:
E-Mail: arigato.freelance@gmail.com
|
|
13.02.2014, 23:18 | #56 |
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
Arigato, BDA, спасибо.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
векторная алгебра | KIRILOW | Помощь студентам | 61 | 31.10.2012 15:45 |
LNK1561 (векторная программа) | finz | Помощь студентам | 6 | 20.05.2011 18:01 |
Векторная графика | AnReykfi | Помощь студентам | 0 | 15.05.2010 14:10 |
векторная графика. квадрат | varelik | Мультимедиа в Delphi | 18 | 07.09.2009 22:25 |
Векторная графика в C++ Builder 6 | Max2114 | C++ Builder | 3 | 19.01.2009 14:56 |