谁能给我解释一下为什么 speed
计算失败了?
这是一个浮点计算。我在日志中显示(下面)打印所有涉及的因素。
根据我的手算器:
length: sqrt(3.497924^2 + (-1.134711)^2) = 3.67736881
speed: 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
最佳答案
你能在你的日志行中打印更多的 SPEED_TRANSFER[level]
数字吗?您正在查看小数点后第三位的错误,但只显示其中一个因素的 2 位。例如,如果 SPEED_TRANSFER[level] == 1.055
结果是正确的(虽然我希望它在您的日志行中打印为 1.06,但这是另一回事)。
关于Android float 乘以一个因子 0.004739,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15596820/