なぜ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