Math 获得场景2D演员';在Libgdx中旋转后的s位置

Math 获得场景2D演员';在Libgdx中旋转后的s位置,math,geometry,libgdx,scene2d,Math,Geometry,Libgdx,Scene2d,我有以下旋转功能: public void rotate( Actor a ) { float rotateBy = 30.0f, newX = ( a.getX() * ( float ) Math.cos( rotateBy ) ) - ( a.getY() * ( float ) Math.sin( rotateBy ) ), newY = ( a.getX() * ( float ) Math.sin( rotateBy ) ) + ( a

我有以下旋转功能:

public void rotate( Actor a ) {
    float rotateBy = 30.0f,
          newX = ( a.getX() * ( float ) Math.cos( rotateBy ) ) - ( a.getY() * ( float ) Math.sin( rotateBy ) ),
          newY = ( a.getX() * ( float ) Math.sin( rotateBy ) ) + ( a.getY() * ( float ) Math.cos( rotateBy ) ),
          moveByX = a.getX() - newX, // delta
          moveByY = a.getY() - newY, // delta
          duration = 1.0f; // 1 second

    a.addAction(
        Actions.sequence(
            Actions.parallel(
                Actions.rotateBy( rotateBy, duration ),
                Actions.moveBy( moveByX, moveByY, duration )
            )
        )
    );
}
但是moveByXmoveByY的值似乎不准确

我们的目标是计算出旋转后新的x,y是什么,并向上移动那么多,以便它仍然保持与旋转前相同的y

还有,我的演员画法:

    @Override
    public void draw( Batch batch, float parentAlpha ) {
        batch.draw( texture, getX(), getY(), getWidth()/2, getHeight()/2, getWidth(), getHeight(), getScaleX(), getScaleY(), getRotation() );
    }

这就是我要做的:首先,演员的原点必须是正方形的中心,然后旋转演员的中心,你会看到这样的东西

红线表示演员需要向上移动才能跟随地板的y偏移,正如您可以看到的那样,y偏移会增加或减少(因此您可能无法使用Actions.moveBy,因为这会沿线性方式移动,而您的路径不是线性的,请参见蓝线),所以

yOffset是基于正方形旋转角度描述红线长度的函数:

public float yOffset(float angle) {
    angle %= Math.PI/2;
    return (float) Math.abs(squareSize*(Math.sin((Math.PI/4+angle))-Math.sin(Math.PI/4)));
}

所有角度均以弧度为单位。

是否围绕长方体中心旋转,然后平移?如果你想要一个简单的旋转而不需要平移,你的顶点位置需要相对于长方体的中心。对不起,我没有真正理解你的问题。你熟悉LibGDX吗?是的,这正是我想做的,但你遗漏的部分正是我想问的:)如何计算旋转后的y偏移?我添加了yOffset实现很棒!一个问题:如何处理宽度和高度不同的形状?像椭圆形还是长方形?
public float yOffset(float angle) {
    angle %= Math.PI/2;
    return (float) Math.abs(squareSize*(Math.sin((Math.PI/4+angle))-Math.sin(Math.PI/4)));
}