1

なぜspeed計算がオフになっているのか誰かに説明してもらえますか?
浮動小数点計算です。関係するすべての要因をログ印刷で(以下に)示します。
私の電卓によると:

長さ:sqrt(3.497924 ^ 2 +(-1.134711)^ 2)= 3.67736881
速度:1.05 * 3.67736881 = 3.86123725

これは、印刷結果3.879624から4.739 10^-3の係数でずれています。

コード:

        float factor = yTouch(paddle, ballBounds);
        float speed = SPEED_TRANSFER[level] * PointF.length(mSpeed.x, mSpeed.y);
        double alpha = Math.PI/2;
        double beta = Math.atan2(mSpeed.y, mSpeed.x);
        double tau = -(2*alpha+beta);
        Log.v("debug", String.format("speed(%f) mSpeed(%f,%f) transfer(%2.2f) 
            length(%f) Original tau(%3.2f)", speed, mSpeed.x, mSpeed.y, 
            SPEED_TRANSFER[level], PointF.length(mSpeed.x, mSpeed.y), tau/Math.PI));

ログ:

03-24 10:48:53.421: V/debug(3236): speed(3.879624) mSpeed(3.497924,-1.134711) transfer(1.05) length(3.677369) Original tau(-0.90)

編集
私はこれを試しました、直接乗算は正しいです。

Log.v("debug", "Direct multiplication:" + (1.05f * 3.677369f) );

03-24 11:49:08.687: V/debug(7644): Direct multiplication:3.8612373
4

1 に答える 1

1

ログ行にもっと多くの桁を印刷できますSPEED_TRANSFER[level]か?小数点以下第3位のエラーを見ていますが、いずれかの要因の2桁しか表示されていません。たとえばSPEED_TRANSFER[level] == 1.055、結果が正しい場合(ただし、これはログ行に1.06として出力されると予想していましたが、それは別の問題です)。

于 2013-03-24T12:27:55.570 に答える