3D xyz юзаю.
Как думаете сработает такой вариант ?
На рисунке видно, что луч не пересикает отрезок.
точка желтая это ray.origin, ray.dir зеленая стрелочка то есть наш луч.
Моя идея такая.
мы знаем вектор ray.dir .
Нам надо узнать он находится между linePointBegin и linePointEnd.
Для этого мы begin=linePointBegin-ray.origin; end=linePointEnd-ray.origin;
И сравним находится ли ray.dir между begin и еnd(на рисунке две синие стрелки ) ? Если да, то луч пересек отрезок.
Вопрос как это сравнение делать ? через dot или нахождение угла между двумя векторами ? Или еще как-то проще.
ronniko, это называется не "линия", а "отрезок". Поправь терминологию, чтоб тебя понимали правильно.
ronniko
> Как думаете сработает такой вариант ?
мы тут подумали и решили:
https://chat.qwen.ai/s/fc400ae4-b73a-48b9-a699-a6b2d58ac195?fev=0.0.233
ronniko
ну, на самом деле тут школьная геометрия, но если копать в сторону оптимизации,
то нужно написать конкретные методы для разных способов,
убедиться что они работают(реально протестировать)
и посчитать в них операторы и тогда уже точно говорить айс или не айс.
В 3д луч не пересекает отрезок с вероятностью 100%
1 frag / 2 deaths
совпадающие лучи. Или в его случае луч построенный из отрезка.
Qwen крут. Спасибо за такое объяснение.
v1 = linePointBegin - ray.origin v2 = linePointEnd - ray.origin d = ray.dir cross1 = v1.x * d.y - v1.y * d.x cross2 = d.x * v2.y - d.y * v2.x if not (( cross1 >= 0 and cross2 >= 0) or ( cross1 <= 0 and cross2 <= 0)): return False # Луч не между концами → нет пересечения
Зашёл прочитать "Я ваш отрезок лучом пересекал", от nes'a, а его нет.
1 frag / 2 deaths
> В 3д луч не пересекает отрезок с вероятностью 100%
Лежащие в одной плоскости?
master-sheff
В плоскости задача конечно имеет смысл
Но Роннико зачем-то сказал про 3д
1 frag / 2 deaths
> Но Роннико зачем-то сказал про 3д
Поэтому ИИ говно, что он не может предугадать помыслы человека роннико. Впрочем, как и мы все, лол
2D тоже бывает полезно.