0

基本的な JavaFX ゲーム開発に取り掛かろうとしているのですが、いくつかの円の計算で混乱しています。

(x:250, y:250) に半径 50 の円があります。

私の目的は、マウスの位置に基づいて、上記の円の円周上に配置される小さな円を作成することです。

私が混乱しているのは、座標空間とその背後にあるTrigです。

私の問題は、画面上の X/Y スペースが 0,0 を中心としていないことに起因しています。ただし、画面の左上は 0,0 で、右下は 500,500 です。

私の計算は次のとおりです。

var xpos:Number = mouseEvent.getX();
var ypos:Number = mouseEvent.getY();

var center_pos_x:Number = 250;
var center_pos_y:Number = 250;

var length = ypos - center_pos_y;
var height = xpos - center_pos_x;

var angle_deg = Math.toDegrees(Math.atan(height / length));
var angle_rad = Math.toRadians(angle_deg);

var radius = 50;

moving_circ_xpos = (radius * Math.cos(angle_rad)) + center_pos_x;
moving_circ_ypos = (radius * Math.sin(angle_rad)) + center_pos_y;

マウスを動かしたときに計算した角度 (angle_deg) をアプリに出力させたところ、出力は以下のようになりました。

マウスが (反時計回りに移動する角度で) ある場合:

  • 円の真上で、中心に対して水平方向に並んでいる場合、角度は -0 です。
  • 左側で垂直方向の中央、角度は -90 です。
  • 円の真下で、中心に対して水平に並んでいる場合、角度は 0 です。
  • 右に、垂直に中央に、角度は 90 です

では、0、90、180、270 にするにはどうすればよいでしょうか??

小さいものに違いないのは分かっているのですが、それが何か思いつきません...

助けてくれてありがとう(いいえ、これは課題ではありません)

4

3 に答える 3

4

atan(height/length)角度を取得するのに十分ではありません。「ゼロ除算」の可能性だけでなく、各象限を補正する必要があります。ほとんどのプログラミング言語ライブラリは、atan22 つの引数を取るメソッドを提供します。yx。このメソッドは、この計算を行います。

ウィキペディアの詳細: atan2

于 2008-11-06T04:14:11.940 に答える
3

角度を計算せずに逃げることができます。代わりに、円の中心 (250,250) とマウスの位置 (xpos,ypos) を使用して線を定義します。線の長さが円の半径に等しい場合、線は円と交差します。

// 中心からマウスまでの距離を計算します。
xlen = xpos - x_center_pos;
ylen = ypos - y_center_pos;

line_len = sqrt(xlen*xlen + ylen*ylen); // ピタゴラス: x^2 + y^2 = 距離^2

// 円との交点を見つけます。
moving_circ_xpos = x_center_pos + (xlen * radius / line_len);
moving_circ_ypos = y_center_pos + (ylen * radius / line_len);

マウスが円の中心にないことを確認してください。そうしないと、line_len がゼロになり、マウスがブラック ホールに吸い込まれます。

于 2008-11-06T04:37:47.010 に答える
0

この種の問題に役立つ「Graphics Gems」という素晴らしい本があります。アルゴリズムとソース コード (CI の考え方) のクックブックであり、テスト済みの機能を使用して問題をすばやく解決できます。実際に手に取ってみることを強くお勧めします - サーフェスの法線と衝突検出を使ってかなり複雑な操作を行うコードをすぐに追加する必要があったときに、大幅な時間を節約できました。

于 2008-11-06T04:45:32.970 に答える