gpt4 book ai didi

android - 矩阵操作矩形的 HitTest

转载 作者:行者123 更新时间:2023-11-29 18:03:59 25 4
gpt4 key购买 nike

我有一个位图图像,我正在尝试对其进行 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com