sandersik
@sandersik
Занимаюсь программированием 2-3 года

Как понять входит ли точка в квадрат?

Как понять входит ли заданная точка координат (х,у) в квадрат(каждая точка плавающая)?
zjO63N0.png
  • Вопрос задан
  • 2065 просмотров
Решения вопроса 1
Seasle
@Seasle Куратор тега JavaScript
const point = (x, y) => ({ x, y });

const A = point(-1, 1);
const B = point(1, 1);
const C = point(1, -1);
const D = point(-1, -1);
const E = point(0, 0);

const side = (a, b, p) =>  Math.sign((b.x - a.x) * (p.y - a.y) - (b.y - a.y) * (p.x - a.x));

const inArea = side(A, B, E) === -1 &&
               side(B, C, E) === -1 &&
               side(C, D, E) === -1 &&
               side(D, A, E) === -1;

console.log(inArea); // true


На Lua

function point(x, y)
    return { ["x"] = x, ["y"] = y }
end

function sign(number)
    if (number < 0) then
        return -1
    elseif (number > 0) then
        return 1
    else 
        return number
    end
end

function side(a, b, p)
    return sign((b.x - a.x) * (p.y - a.y) - (b.y - a.y) * (p.x - a.x))
end

A = point(-1, 1)
B = point(1, 1)
C = point(1, -1)
D = point(-1, -1)
E = point(0, 0)

inArea = side(A, B, E) == -1 and
         side(B, C, E) == -1 and
         side(C, D, E) == -1 and
         side(D, A, E) == -1;

print(inArea) -- true

Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Karpion
Если это ровный квадрат - то x1=x4, и остальные параметры тоже равны попарно. В таком случае напишите нормально.
Для ровного квадрата - надо убедиться, что X-координата точки находится между X-координатами левой и правой границы; и аналогично - для Y-координаты.
А можно посчитать среднюю точку. И потом убедиться, что отклонение координат X и Y отличаются от средней точки не более чем на половину стороны квадрата - по абсолютной величине. Это хорошо тем, что можно не бояться перепутать правую и левую стороны квадрата.

Или квадрат м.б. повёрнут - тогда его надо задают немного совсем иначе, есть несколько вариантов.
Тут вычисления немного сложнее.
Ответ написан
Комментировать
@16tomatotonns
Томат
function aabbPoint(x, y, rx, ry, rw, rh)
  return x >= rx and x <= rx + rw and y >= ry and y <= ry + rh
end
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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