Учитывая 4 точки, описывающие 2 отрезка, как рассчитать, если линия A направлена к линии B или от нее?
Две линии имеют фиксированную длину и могут быть измерены как расстояние от x1 / y1 до x2 / y2.
Учитывая 4 точки, описывающие 2 отрезка, как рассчитать, если линия A направлена к линии B или от нее?
Две линии имеют фиксированную длину и могут быть измерены как расстояние от x1 / y1 до x2 / y2.
Ответы:
Позвольте A
и B
быть две точки на черной линии. ПозволятьC
и D
быть вашим синим сегментом. Знак z
координаты перекрестного произведения AB^AC
говорит о том, C
находится ли он «слева» или «справа» от черной линии. Аналогичным образом, перекрестное произведение AB^CD
говорит вам, направлено ли CD
«влево» или «вправо» от черной линии.
Мы действительно не хотим знать, левое или правое; все, что мы хотим, это убедиться, что они имеют одинаковое направление или противоположное направление, поэтому мы умножаем эти два значения.
Поэтому должен работать следующий псевдокод:
z1 = (xB-xA)*(yC-yA) - (yB-yA)*(xC-xA);
z2 = (xB-xA)*(yD-yC) - (yB-yA)*(xD-xC);
z3 = z1 * z2;
if (z3 < 0)
; /* Pointing towards (BUT maybe even crossing) */
else if (z3 > 0 || z2 != 0)
; /* Pointing away */
else
; /* Parallel */
Боюсь, мне нужно время, чтобы написать правильное решение для кривой Безье. Следующая ситуация в сторону или в сторону?
Предполагая, что начальной точкой является зеленый круг, а конечной точкой является красная стрелка
Вычислите расстояние между начальной точкой как DS и черным сегментом и сделайте то же самое для конечной точки (красная стрелка) как DE. Если DS> DE, то сегмент направлен в сторону. если DE> DS, это указывает далеко. Если оба равны, два параллели.
Вы можете найти, как вычислить расстояние от точки до отрезка здесь , и до квадратичной кривой Безье здесь . Однако, в зависимости от формы кривой Безье, она может вернуть странные результаты (кривая может пересекать себя)