Как определить, какой прямоугольник был нажат? - PullRequest
0 голосов
/ 12 февраля 2011

У меня на экране несколько прямоугольных фигур, некоторые из которых повернуты.Теперь пользователь нажимает на позицию (x, y) экрана.Существует ли стандартный алгоритм для определения того, какой из прямоугольников был нажат (содержит координаты (x, y))?

Это связано с проблемой, с которой я столкнулся:переведены, масштабированы или повернуты исчезают

1 Ответ

1 голос
/ 12 февраля 2011

Если вы ищете «точки в алгоритмах многоугольников», вы найдете кучу.Я полагаю, что для прямоугольников проще всего разделить прямоугольник на два треугольника и проверить барицентрические координаты контрольной точки.Вот непроверенная попытка его кодирования:

boolean pointInTriangle(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) {
    int denom = (y2-y3)*(x1-x3) + (x3-x2)*(y1-y3);
    if(denom==0) return false; // collinear

    int num1 = (y2-y3)*(x-x3) + (x3-x2)*(y-y3);
    if((denom < 0 && num1 > 0) || (denom > 0 && num1 < 0)) return false;

    int num2 = (y3-y1)*(x-x3) + (x1-x3)*(y-y3);
    if((denom < 0 && num2 > 0) || (denom > 0 && num2 < 0)) return false;

    int num3 = denom - num1 - num2;
    if((denom < 0 && num3 > 0) || (denom > 0 && num3 < 0)) return false;

    return true;
}

Теперь вам просто нужно перебрать прямоугольники, проверяя, находится ли точка в одном из двух треугольников, составляющих прямоугольник.1006 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...