【问题标题】:Android Java - postRotate not rotating around center?Android Java - postRotate 不围绕中心旋转?
【发布时间】:2014-07-09 22:59:24
【问题描述】:

我认为这更像是一个逻辑问题而不是 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

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

【问题讨论】:

    标签: java android matrix bitmap rotation


    【解决方案1】:

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

    矩阵 A 通过乘法 Ax 应用于点 x。你有 A = RT 一个旋转,翻译后乘以。结果是 RTx,即 R (T x),表示该点被平移 然后 旋转,而您的意思可能恰恰相反。

    此外,您似乎在重复连接增量更改。浮点误差会累积,表现为恶化的失真。而是保持每艘船的方向参数 x、y、theta。这些由 UI 控制。在每次渲染中从这些设置矩阵。变换将围绕点 (w/2, h/2) 旋转,然后平移到 (x, y)。但是实现这一点的矩阵是平移后乘以旋转!您还必须为每艘船重置矩阵。

    【讨论】:

    • 谢谢!有时我真的太努力了,我一直在寻找一种比通过引用矩阵值来使用方向参数更方便的方法,但它们并不可靠,至少我使用它们的方式是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 2013-08-04
    相关资源
    最近更新 更多