Если вы ищете «точки в алгоритмах многоугольников», вы найдете кучу.Я полагаю, что для прямоугольников проще всего разделить прямоугольник на два треугольника и проверить барицентрические координаты контрольной точки.Вот непроверенная попытка его кодирования:
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 *