Elena0394
@Elena0394

Как узнать, пересекутся векторы?

Данные векторов:
x1-0; y1-0;
x2-10; y2-0;
Их проекция на ось:
Vx1=40; Vy1=0;
Vx2=-30; Vy2=0;
Если нарисовать их, то видно что пересекаются, а как мне это все доказать, числами?)
  • Вопрос задан
  • 600 просмотров
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Введите 2 переменные t и q - это "время" на первом и втором луче, составьте 2 уравнения. Решите их - найдете время пересечения на каждом луче. Убедитесь, что пересечения при t>=0, q>=0:
x1+t*vx1=x2+q*vx2
y1+t*vy1=y2+q*vy2


надо проверить, что оно имеет решение. Преобразуйте его к стандартному виду:
t*vx1-q*vx2=x2-x1
t*vy1-q*vy2=y2-y1


Решите систему методом Краммера. Если определитель системы != 0 - то найдте 2 переменные q и t. Проверьте, что они обе неотрицательные.

Если определитель равен нулю, то прямые или не пересекаются вообще, или совпадают. Они совпадают, если оба вспомогательные определители системы равны 0.

В этом случае надо проверить, что лучи пересекаются по отрезку или лучу. Для этого надо проверить, а не лежит ли начало второго луча на первом и наоборот. Для этой проверки можно воспользоватся векторным произведением векторов. Считаете вектор {x2-x1, y2-y1} и умножаете на вектор {vx1, vy1}. Эти 2 вектора или смотрят в одну сторону (и пересечение есть), или в разные. В первом случае векторное произведение будет положительно, во втором - отрицательно. Нулевое произведение считайте как положительное - это значит что или точки совпадают или вектор направления нулевой.

Т.е. весь алгоритм
1) Считайте 3 определителя по методу краммера
2) Если главный определитель не 0, считайте q и t. Пересечение есть, если q>=0 и t>=0.
3) Если главный определитель 0, но хотя бы один из вспомогательных не 0 - пересечения нет.
4) Считайте векторное произведение {x2-x1, y2-y1} на {vx1, vy1}. Если оно неотрицательно - пересечение есть.
5) Считайте векторное произведение {x1-x2, y1-y2} на {vx2, vy2}. Если оно неотрицательно - пересечение есть.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы