Android Java - postRotate不围绕中心旋转?

时间:2014-07-09 22:59:24

标签: java android matrix bitmap rotation

我相信这更像是一个逻辑问题,而不是一个java问题,抱歉。

我的意图相当简单,我希望船只用矩阵移动和旋转,位图ship1是旋转的中心枢轴。代码工作得很好,除了枢轴被一个奇怪的偏移关闭。 (底部链接的难题图片)

0处的默认值旋转有效,但所有其他值似乎都从中心滑落,其中180距离中心最远。

centerX = playerValues[Matrix.MTRANS_X] + ship1.getWidth()/2;
centerY = playerValues[Matrix.MTRANS_Y] + ship1.getHeight()/2;

newRotation = ((float) Math.toDegrees(Math.atan2(fingery1 - centerY, fingerx1 - centerX)));

matrix.postRotate((newRotation - prevRotation), centerX, centerY);
prevRotation = newRotation;

        if (fingerx1 > playerX) {
            xspeed = 1;
        } else

        if (fingerx1 < playerX) {
            xspeed = 0;
        } else

        if (fingery1 > playerY) {
            yspeed = 1;
        } else

        if (fingery1 < playerY) {
            yspeed = 0;
        }

        matrix.postTranslate(xspeed, yspeed);

matrix.getValues(playerValues);

我试图绘制位图的关系如何看待不同的角度。 (蓝点是我打算旋转位图的地方,右边的箭头是唯一正确的箭头)。

http://i.stack.imgur.com/2Yw76.png

如果您发现任何错误或任何反馈有帮助,请与我们联系!我只需要第二双眼睛,因为我的很快就会爆炸。

1 个答案:

答案 0 :(得分:0)

考虑学习一个好的计算机图形文本重新矩阵数学。 Foley和Van Dam总是一个安全的赌注。

矩阵A应用于带有乘法Ax的点x。你有一个A = RT的旋转与翻译后的倍数。结果是RTx是R(T x)意味着点被翻译然后旋转,当你可能意味着相反时。

此外,您似乎反复连接增量更改。浮点误差将累积,可见恶化的扭曲。而是维护每艘船的方向参数x,y,theta。这些由UI控制。在每次渲染中设置矩阵。变换将围绕点(w / 2,h / 2)旋转,然后转换为(x,y)。但影响这一点的矩阵是翻译后乘以旋转!您还必须重置每艘船的矩阵。