Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 矩阵操纵矩形的命中测试_Android_Matrix - Fatal编程技术网

Android 矩阵操纵矩形的命中测试

Android 矩阵操纵矩形的命中测试,android,matrix,Android,Matrix,我有一个位图图像,我正在尝试对其进行命中测试。如果只是一个普通位图,则命中测试可以工作。但是我需要旋转和缩放位图,我似乎无法正确地理解命中测试 这里是光标x和y。我需要检查光标(手指按压)是否在操作过的位图中单击。天平似乎工作正常,但旋转似乎没有起作用 float[] pts = new float[4]; float left = m.getX(); float top = m.getY(); float right = left + mBitmaps.get(i).getWidth(); f

我有一个位图图像,我正在尝试对其进行命中测试。如果只是一个普通位图,则命中测试可以工作。但是我需要旋转和缩放位图,我似乎无法正确地理解命中测试

这里是光标x和y。我需要检查光标(手指按压)是否在操作过的位图中单击。天平似乎工作正常,但旋转似乎没有起作用

float[] pts = new float[4];
float left = m.getX();
float top = m.getY();
float right = left + mBitmaps.get(i).getWidth();
float bottom = top + mBitmaps.get(i).getHeight();
pts[0] = left;
pts[1] = top;
pts[2] = right;
pts[3] = bottom;

float midx = left + mBitmaps.get(i).getWidth()/2;
float midy = top + mBitmaps.get(i).getHeight()/2;

Matrix matrix = new Matrix();
matrix.setRotate(m.getRotation(), midx, midy);
matrix.setScale(m.getSize(), m.getSize(), midx, midy);

matrix.mapPoints(pts);

if(x >= pts[0] && x <= pts[2] && y >= pts[1] && y <= pts[3])
{
    return i;
}
float[]pts=新浮点[4];
左浮动=m.getX();
浮顶=m.getY();
float right=left+mbitmap.get(i).getWidth();
float bottom=top+mbitmap.get(i).getHeight();
pts[0]=左;
pts[1]=顶部;
pts[2]=右;
pts[3]=底部;
float midx=left+mbitmap.get(i).getWidth()/2;
float midy=top+mbitmap.get(i).getHeight()/2;
矩阵=新矩阵();
matrix.setRotate(m.getRotation(),midx,midy);
矩阵.setScale(m.getSize(),m.getSize(),midx,midy);
矩阵.地图点(临时秘书处);

如果(x>=pts[0]&&x=pts[1]&&y您的测试失败,因为旋转后矩形不再与坐标轴对齐

您可以使用逆变换矩阵将光标位置变换回来,然后将变换后的位置与原始矩形进行比较

Matrix matrix = new Matrix();
matrix.setRotate(m.getRotation(), midx, midy);
matrix.postScale(m.getSize(), m.getSize(), midx, midy);

Matrix inverse = new Matrix();
matrix.invert(inverse);
pts[0] = x;
pts[1] = y;
inverse.mapPoints(pts);
if(pts[1] >= top && pts[1] <= bottom && pts[0] >= left && pts[0] <= right)
{
    return i;
}
矩阵=新矩阵();
matrix.setRotate(m.getRotation(),midx,midy);
postScale(m.getSize(),m.getSize(),midx,midy);
矩阵逆=新矩阵();
矩阵。逆(逆);
pts[0]=x;
pts[1]=y;
逆映射点(pts);

如果(pts[1]>=top&&pts[1]=left&&pts[0],我认为测试应该是如果(pts[0]>=0&&pts[0]=0&&pts[1]矩阵
。我会将矩阵设置代码添加到答案中。是的,这就是我所拥有的,我没有删除该代码。我只是将你的代码添加到我的代码中。