我的屏幕上有几个矩形形状,其中一些是旋转的。现在用户点击屏幕的位置(x,y)。是否有标准算法来检测哪个矩形被点击(包含(x,y)坐标)?
这与我遇到的问题有关: Child Views that are translated, scaled or rotated disappear
答案 0 :(得分:1)
如果您搜索“多边形算法中的点”,您会找到一堆。对于矩形,我想最简单的方法是将矩形划分为两个三角形并检查测试点的barycentric coordinates。这是一个未经测试的袖手旁观尝试:
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;
}
现在你只需要遍历矩形,检查点是否在构成矩形的两个三角形中的任何一个。