2

与えられた点の周りの円上でオブジェクトを動かしたい。AndroidでOpenGLを使用していますが、ビューポートは横向きモード(1280 * 800)の画面解像度です。オブジェクトを回転させたいポイントは、たとえば(500、300)で、これはユーザーが押した場所です。希望する円の半径rもあります。要約すると、円の中心、半径、および角度(ゲームループの反復ごとにオブジェクトを移動する量)があります。

これまで私はこれを試しました:

this.setPosX(((float)Math.cos(angle)*radius + center.x) * width);
this.setPosY(((float)Math.sin(angle)*radius + center.y) * height);

これにより、円ではなく省略記号に沿った動きが作成されます...

誰か助けてくれませんか?

4

3 に答える 3

5

楕円を生成します。円には高さがありません。代わりにこれを試してください

this.setPosX(((float)Math.cos(angle)*radius ) + center.x);
this.setPosY(((float)Math.sin(angle)*radius ) +center.y);
于 2013-01-06T15:57:59.170 に答える
2

最後に幅と高さの要素を削除するだけです。円が必要な場合は、座標にさまざまな係数を掛けることはできません。

于 2013-01-06T15:55:37.220 に答える
2

円周上の点の正しい値に、意味のない他の異なる値を掛けているため、数式は正しくありません。

あなたが中心であるという事実を考えてください、c(x,y)そしてあなたはによって与えられる値によって動き回る必要がありますr(cos(angle)*radius, sin(angle)*radius)

あなたが得るものはですp(x + cos(angle)*radius, y + sin(angle)*radius)

widthこれらの2つの座標に他の2つの値(および数式内)を掛けるとheight、円の係数または中心の係数が変更されるため、楕円だけでなく、中心を変更する楕円になります。

それで:

  • サークル:p(c.x + cos(angle)*r, y + sin(angle)*r)
  • 楕円:p(c.x + cos(angle)*w, y + sin(angle)*h)
  • あなたの公式:(p((c.x + cos(angle)*r)*w, (c.y + sin(angle)*r)*h)これは意味がありません)
于 2013-01-06T15:59:21.717 に答える