З огляду на 4 бали, що описують 2 відрізки рядка, як обчислити, чи пряма А знаходиться в бік від лінії Б?
Дві лінії мають фіксовану довжину і можуть вимірюватися як відстань від x1 / y1 до x2 / y2.
З огляду на 4 бали, що описують 2 відрізки рядка, як обчислити, чи пряма А знаходиться в бік від лінії Б?
Дві лінії мають фіксовану довжину і можуть вимірюватися як відстань від 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, він вказує. Якщо обидва рівні, два - паралелі.
Ви можете знайти , як обчислити відстань від точки до відрізка тут і квадратичної кривої Безьє тут . Однак, залежно від форми кривої Безьє, вона може повернути дивні результати (крива може перетинати себе)