|
Заблокирован
|
||||||
Найти точку пересечения отрезка и перпендикуляра, опущенного на отрезок из точки23.07.2015, 13:33. Показов 21349. Ответов 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 | |
|
Написать уравнение перпендикуляра, опущенного из точки на прямую Найти точку пересечения отрезка с прямой Найти точки пересечения отрезка и окружности Найти точку\точки пересечения гипербол Программа на определение перпендикуляра и нахождения точки пересечения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
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 и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|