Проверьте, пересекает ли квадрат линию в JavaScript - PullRequest
0 голосов
/ 24 декабря 2018

Учитывая положение и размеры квадрата, каково уравнение в JavaScript для проверки, проходит ли линия через прямоугольник?

Что я пробовал до сих пор:

function isSquareIntersectingLine(square, line) {
    return (
        line.startX >= square.topLeftX &&
        line.startX <= square.topLeftX + square.width &&
        line.endX >= square.topLeftX + square.width
    );
}

Это работает, если размеры:

Square: {topLeftX: 0, topLeftY: 0, width: 5, height: 5}
Line: {startX: 2, startY: -4, endX: 6, endY: 3}

Но если размеры такие, это не сработает:

Square: {topLeftX: 0, topLeftY: 0, width: 5, height: 5}
Line: {startX: 2, startY: -4, endX: 3, endY: 10}

Какая правильная формула дляпроверка, пересекает ли отрезок прямой квадрат в JavaScript?

1 Ответ

0 голосов
/ 24 декабря 2018

Использовать Алгоритм отсечения Коэна-Сазерленда (или другой отсечение строк один)

Получить коды для обоих концов сегментов и проверить:

if both codes are zero, segment is inside (A-B case)
if code1 & code2 != 0 segment is outside  (K-L case)
if code1 & code2 = 0, analyze codes
    zero-nonzero: intersection exists (C-D)
    if code1 | code2 = 1100, 0011 : intersection exists (E-F)
         otherwise check for intersections with edges (GH)

enter image description here

...