|
Заблокирован
|
||||||
Найти точку пересечения отрезка и перпендикуляра, опущенного на отрезок из точки23.07.2015, 13:33. Показов 21329. Ответов 30
Метки нет (Все метки)
Привет! Помогите двоишнику, я же тупой батхэд
! Есть отрезок, заданный двумя точками P1 и P2. Есть точка P3. Так вот, нужно найти координаты точки пересечения перпендикуляра, опущенного на заданный отрезок и, собственно этого отрезка, причём, если точка не находится на отрезке - как то просигнализировать ... Нужен рабочий код. Можно использовать С++ 11/14 и Qt, в котором есть
![]() ![]()
0
|
||||||
| 23.07.2015, 13:33 | |
|
Ответы с готовыми решениями:
30
Найти основание перпендикуляра, опущенного из точки на прямую Написать уравнение перпендикуляра, опущенного из точки на прямую |
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 23.07.2015, 19:53 | |
|
Зря вы так категоричны. Может там опечатка в формуле...вектора крутые если в них шарить. Просто когда-то сам искал решение этой задачи и интересны альтернативы работающие быстрей всегда пригодятся. А теперь человек старался а вы его спугнули =(.
Лучший ответ обозначает решение задачи, пока что он один. Вот графически наглядная интерпретация повторов. А вот в символьной форме: a0=(x3-x1) a1=(x2-x1) a2=(y3-y1) a3=(y2-y1) a4=((a0*a1+a2*a3)) a5=a1*a1 a6=a3*a3 a7=Sqrt(a5+a6) Лежит ли внутри отрезка Proverka<0: Proverka=a4*((x3-x2)*a1+(y3-y2)*a3) x=x1+(a4/a7)*(a1/a7) y=y1+(a4/a7)*(a3/a7) Также неправильно, и проверка неправильна…Вроде ошибок нет =).
0
|
|
|
|
|||||||
| 24.07.2015, 07:52 | |||||||
|
У меня мой код выдавал правильные ответы:
0
|
|||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||
| 24.07.2015, 09:24 | ||
|
Вот почему не работало, я перепутал точки. А теперь работает и проверка, упростил и исправил =). Теперь есть два решения: Отрезок: A (x1,y1) B (x2,y2) Точка: C (x3,y3) Точка на отрезке: D (x4,y4) -------- Метод1: a0=x2-x1 a1=y2-y1 x4=(a0*a1*(y3-y1)+x1*a1^2+x3*a0^2)/(a1^2+a0^2) y4=a1*(x4-x1)/a0+y1 Принадлежность отрезку Если x4<x2… -------- -------- Метод2: a0=x2-x1 a1=y2-y1 a2=x3-x1 a3=y3-y1 Если Proverka<0 то точка принадлежит отрезку. Proverka=(a2*a0+a3*a1)*((x3-x2)*a0+(y3-y2)*a1) k=(a2*a0 + a3*a1) / (a0² + a1²) x4=x1 + k*a0 y4=y1 + k*a1 Butt-Head спешите с выводами… и поленились проверить формулы сами.
0
|
||
|
|
|||||||||
| 24.07.2015, 09:30 | |||||||||
|
Напомню вам про правила форума:
Так, что либо делайте выводы, либо в следующий раз получите карту.
0
|
|||||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 24.07.2015, 09:41 | |
|
Предлагаю отметить пост 23 как лучший ответ. Два метода решения с коментами.
0
|
|
|
Заблокирован
|
||
| 24.07.2015, 10:57 [ТС] | ||
|
Такая проверка сработает только если у исходного отрезка вторая точка правее и выше первой, иначе не получится. Точнее получится, но надо будет писать 4 условия для 4-х направлений и ещё 4 проверки для ортогональных условий. Думаю, что проверка в векторном стиле более удачный ход в данном случае, она же лишена таких недостатков и куда бы не был направлен отрезок, отрицательный результат скалярного произведения векторов всегда будет свидетельствовать о том, что точка не принадлежит отрезки, всё верно, Ilot или я что - то не так понял?
0
|
||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||
| 24.07.2015, 12:20 | ||
|
Разве проверка не очевидна? Сравните. Если x4<x2 и x4>x1 и y4<y2 и y4>y1 (a2*a0+a3*a1)*((x3-x2)*a0+(y3-y2)*a1) А разве сверка чисел не много быстрей чем 5 умножений т.д. действия?
0
|
||
|
Заблокирован
|
|||
| 24.07.2015, 12:51 [ТС] | |||
|
x1 = 3; x2 = 7; точка на луче (наша точка пересечения) имеет координаты: x4 = 5; тут да, всё ок: (x4 >= x1 && x4 <= x2) -> true; Теперь, если делать такую же проверку, но для отрезка с координатами: x1 = -4; x2 = -12; точка на луче (наша точка пересечения) имеет координаты: x4 = -7; тогда твоя проверка не сработает, т.к. отрезок направлен в другую сторону, понимаешь? (несмотря на то, что точка на отрезке) (x4 >= x1 && x4 <= x2) -> false!; В этом случае необходимо 8-мь проверок! Для 4-х направления отрезка и для 4-х частных случаев ортогональности, а это как ты понимаешь - оверхэд по скорости
0
|
|||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 24.07.2015, 13:32 | |
|
А по нормальному нужно курить условия проверки с учетом четверти и будет всеравно быстрей умножения)).Но если разовая операция то чего париться.. вон тут вообще
http://hardfire.ru/point_in_segment Кучи форумов где “принадлежность точки отрезку” Сотни страниц коментов... жесть .Вот еще пример…if(((sgn(x1-x2))<>(sgn(x1-x3)))then OK Вектора так вектора=).
0
|
|
| 24.07.2015, 13:32 | |
|
Написать уравнение перпендикуляра, опущенного из точки на прямую Найти точку пересечения отрезка с прямой Найти точки пересечения отрезка и окружности Найти точку\точки пересечения гипербол Программа на определение перпендикуляра и нахождения точки пересечения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|