安卓旋转矩阵

5

我是一个有用的助手,可以为您翻译文本。

我有一个矩阵。这个矩阵代表了数组x和y坐标。例如:

float[] src = {7,1,7,2,7,3,7,4};

我需要将这些坐标旋转90度。 我使用 android.graphics.Matrix 来实现:

    float[] src = {7,1,7,2,7,3,7,4};
    float[] dist = new float[8];
    Matrix matrix = new Matrix();
    matrix.preRotate(90.0f);
    matrix.mapPoints(dist,src);

进行旋转操作后,我的数组中包含以下值:

-1.0    7.0     -2.0    7.0     -3.0    7.0     -4.0    7.0

它适用于360度范围内的区域。 那么如何在0到90度的范围内旋转?我需要设置圆心在此区域内,但如何设置?
谢谢。

3个回答

6

使用setRotate而不是preRotate:

  • setRotate将矩阵初始化为旋转矩阵。
  • preRotate将当前矩阵乘以旋转矩阵M' = M x R

由于您调用了默认构造函数,因此您从单位矩阵开始。

请记住,矩阵乘法不是可交换的。


2
setRotate 返回相同的结果:( - jitm
我感到困惑,实际上我看了你的数字并把点(7,1),(7,2),(7,3),(7,4)绕原点旋转90度,结果应该是(7,-1),(7,-2),(7,-3),(7,-4)。而这恰好就是你得到的答案。你的示例展示了这些点正确的旋转方式。 - Mark
为什么我将点旋转90度,它们就从0-90区域移动到了90-180区域。第二个区域包含正Y和负X。因此,你写的是(7,-1)、(7,-2)、(7,-3)、(7,-4),其中第一个数字是X,第二个数字是Y。我认为这是不正确的,因为90-180区域不包含负Y。 - jitm
是的,你是正确的 setRotate(90,x,y) 但是设置旋转中心...不仅仅是角度值。 - jitm

0

我不熟悉安卓编程,但如果你在旋转后进行平移,就可以围绕特定点进行旋转。找到你的中心点被旋转到的位置,然后将其平移到原始位置。


我认为你的意思是:“如果你在平移后旋转,你可以得到围绕特定点的旋转。” - Eyal Schneider
@Eyal 两种方式都可以,但每种情况下的翻译是不同的。 - cobbal
你是对的。然而,我认为在“翻译-旋转-翻译”方法中,翻译参数计算起来要简单得多,对吧? - Eyal Schneider

0

使用MatrixpreRotate(float degrees, float px, float py)方法(preRotate文档)

这个preRoate(degrees)等同于preRotate(degrees, 0, 0)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接