0

3 つの変数で記述されるオブジェクト (つまり、長方形) があります: x (int), y (int)- オブジェクトの位置とrangel (float)- オブジェクトの移動方向を示す天使。次に、オブジェクトの方向 (天使) に合わせてオブジェクトを移動させたいと思います。新しい座標を計算する方法を見つけました:

x += (int)(shift*Math.sin(Math.toRadians(rangel));
y -= (int)(shift*Math.cos(Math.toRadians(rangel));

しかし、この方法が十分に効果的かどうかはわかりません。この操作を実行する他の方法はありますか? ありがとう。

4

3 に答える 3

1

このスレッドによると、 Math.sin は必ずしも最適な実装を使用するとは限りません。既に int にキャストしているため、Math.sin の代わりに近似値を使用することを強くお勧めします。sin(x)を近似するための正確で高速なアルゴリズムを提供しているように見えるこの投稿を見つけました。cos(x) の近似値を見つけるか、与えられた解から自分で導出できると確信しています。

さらに、小数の精度を無視するという特殊なケースについては、さらに高速な近似があると思います。

よろしく、サム

于 2013-09-22T10:10:13.260 に答える
0

Math.toRadians(rangel)最初に計算してローカル変数に格納する方がわずかに高速な場合があるため、2 回ではなく 1 回だけ計算する必要があります。しかし、これによる節約はごくわずかです。それ以外は、これは私にとってかなり最適に見えます。

ただし、可能な値が少数しかない場合rangel(たとえば、オブジェクトを 24 方向にしか移動できないなど)、look-sinとの値のテーブルをアップしcosます。

于 2013-09-22T10:02:11.933 に答える
0

これは、角度によってオブジェクトを平行移動する正しい方法です。角度が任意の場合、より高速な方法はありません。

于 2013-09-22T09:35:30.377 に答える