我面临一个巨大的问题,我不知道导致它的原因以及如何解决这个问题。我正在创建一个用Java绘制对象的游戏。对于绘图,我使用线性插值,使用' alpha'用于在一帧中移动具有特定时间值的对象的值。
以下是插值算法的样子:
draw.x = current.getX() * alpha + previous.getX() * (1.0f - alpha);
以上所有值都是浮点数(alpha,current,prev和draw)。
我们假设我们没有移动,current.getX()
和previous.getX()
都是100.0f
浮动。
Alpha值是随机的(它不是随机的,但它是0.0
- 1.0
范围内的数字) - 也是浮点数。
让我们来alpha = 0,4352343
draw.x = 100.f * 0.4352343 + 100.f * (1.0f - 0.4352343) == 43,52343 + 56,47657 == 100
这是完美的,因为我们不会移动 - 它应该是100(我们之前和当前的位置都是100)。
这就是数学的工作原理,无论alpha
有什么价值 - 它总会返回100
,对吗?
否<!/强>
在C ++中确实如此 - 它完美运行,我测试了30分钟,输出为1000万个案例 - 它总是返回100.0
。
但在Java中 - 它没有。对于80.000例,有大约400-500例draw.x
(函数的返回值)变为99.99999999999。
当我画画时,这是完全不可接受的原因,我需要使用int
,所以我必须施放,所以它给出99值,你可以猜出动画会发生什么。
我只有一个问题 - 这怎么可能,上面的算法可以在Java和C ++中给出不同的值以及如何在Java中解决这个问题?
答案 0 :(得分:-1)
它与舍入误差有关,虽然我不确定它们为什么会出现。要解决此问题,您可以使用
正确答案= Math.round(回答);