android - 矩阵操作矩形的 HitTest

标签 android matrix

我有一个位图图像,我正在尝试对其进行 HitTest 。如果它只是一个普通位图,则 HitTest 有效。但是我需要旋转和缩放位图,但我似乎无法正确计算出 HitTest 。

这里的x和y是光标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;
}

最佳答案

您的测试失败,因为旋转后矩形不再与坐标轴对齐。

你可以做的一个技巧是用逆变换矩阵将光标位置变换回来,然后将变换后的位置与原始矩形进行比较。

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

关于android - 矩阵操作矩形的 HitTest ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14313381/

相关文章:

matlab - 在matlab中进行三角矩阵向量乘法的最快方法?

java - DMatrixRMaj : get data in matrix form

java - 通过 HttpURLConnection 的 JSON POST 数据

android - 在 setContentView 找不到源 ~ android 编程

android - 在 App Billing 服务中有时会被杀死

android - Cordova 构建在 superspawn.js 失败

android - 如何使用社交授权库在 linkedin 和 twitter 上分享

不使用 numpy 或任何东西的 python 矩阵创建以及行和列的最大总和

java - 如何在 2d ArrayList 中找到对角线元素的总和?

c - C 中矩阵的迭代器和指针