2

これは、これに対する答えを調査するための適切な用語を知らないだけの問題かもしれません。解決策は三角関数であると確信しています。

X/Y 位置座標と角度 (度) を受け入れるメソッドがあります。指定された回転角度に基づいて、更新された X/Y を返す必要があります。

たとえば、A 点は通常 x=0,y=2 (上部中央) にあります。ここで、90 度回転させる必要があります。私の心の中では、現在の位置が x=2,y=0 (中央右) であることは知っていますが、これを生成する方程式はわかりません。

最初に開始点の象限を決定し、そこから適切な三角関数を実行する必要があると思います。これは、Vector2 オブジェクトのソースである libgdx を使用して開発しているゲーム用です。

私はここまで来ました:

public Vector2 getPointsRotated(Vector2 startPoint, float angle){
    Vector2 newPoint = new Vector2(0,0);

    // determine the starting quadrant
    int quad=0;
    if((startPoint.x>=0)&&(startPoint.y>=0)){quad=0;}
    if((startPoint.x<0)&&(startPoint.y>=0)){quad=1;}
    if((startPoint.x<0)&&(startPoint.y<0)){quad=2;}
    if((startPoint.x>=0)&&(startPoint.y<0)){quad=3;}

    if(quad==0){
        // doesn't work
        newPoint.x = (float) ((newPoint.x)* (Math.sin(angle)));
        newPoint.y = (float) ((newPoint.y)* (Math.cos(angle)));
    }
    // ...
    // other quadrants also don't work
    // ...
    return newPoint;
}

助けてくれてありがとう。

更新: 私は数日間、この問題を回避して戻ってきました。最終的にここに質問を投稿した後、数分以内にそれを理解しました(とにかくlibgdxを使用しているpplの場合)。

Libgdx は Vector2s の回転機能を提供するので、次のようになります。

Vector2 position = new Vector2(0,2);
position.rotate(angle);

完璧に動作します。

4

1 に答える 1

0

この種の問題には、回転行列が非常に役立つことがわかりました。

https://gamedev.stackexchange.com/questions/54299/tetris-rotations-using-linear-algebra-rotation-matrices

于 2013-11-13T22:21:09.100 に答える