如何检测点击了哪个矩形?

时间:2011-02-11 23:41:48

标签: android algorithm android-layout

我的屏幕上有几个矩形形状,其中一些是旋转的。现在用户点击屏幕的位置(x,y)。是否有标准算法来检测哪个矩形被点击(包含(x,y)坐标)?

这与我遇到的问题有关: Child Views that are translated, scaled or rotated disappear

1 个答案:

答案 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;
}

现在你只需要遍历矩形,检查点是否在构成矩形的两个三角形中的任何一个。

相关问题