javascript 中的 Math.abs

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/14750182/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-26 22:29:19  来源:igfitidea点击:

Math.abs in javascript

javascriptjqueryhtmlcanvas

提问by Manoz

I am confused with math.abs(). I did Research through internet but couldn't find any relation with this bouncing ball's animation. I want to know how this works and how ball is bouncing smoothly after using math.abs() function?

我对 math.abs() 感到困惑。我通过互联网进行了研究,但找不到与这个弹跳球的动画有任何关系。我想知道这是如何工作的,以及在使用 math.abs() 函数后球是如何顺利弹跳的?

function bounce() {
    if (x + dx > 293 || x + dx < 0) {
        dx = -dx;
    }
    if (y >= 290) {
        y = 290;
    }
    if (y + dy > 290 || y + dy < 0) {
        dx *= 0.99;
        dy = -dy;
    }
    //if (Math.abs(dx) < 0.01) {
       // dx = 0;
    }
    dy++;
}

I did commentthe line confusing me. Anyone please let me know that how important this function for this animation.

我确实评论了让我困惑的行。任何人都请让我知道这个功能对这个动画有多重要。

Fiddle

小提琴

回答by Denys Séguret

dxis the displacement on x.

dx是 x 上的位移。

Math.abs(dx)is the absolute speed on x, that is the value without the sign, always positive or null.

Math.abs(dx)是 x 上的绝对速度,即不带符号的值,始终为正或为空。

if (Math.abs(dx) < 0.01) {

could have been written as

可以写成

if (dx>-0.01 && dx < 0.01) {

Basically, this line with the following one stops the ball along xif it's already slow.

基本上,x如果球已经很慢,这条线和以下一条线会停止球。

回答by Rune FS

dx is reduced by 1% every time the last condition is met (if (y + dy > 290 || y + dy < 0) {)

每次满足最后一个条件时,dx 减少 1% ( if (y + dy > 290 || y + dy < 0) {)

this calculation can go on forever but would yield jagged results because the floating point precision errors would become a large factor compared to dx so better stop the ball bouncing when it is already slow which is what the test using Math-abs is for. In english you could read

这种计算可以永远持续下去,但会产生参差不齐的结果,因为与 dx 相比,浮点精度误差将成为一个很大的因素,因此当球已经很慢时最好停止弹跳,这就是使用 Math-abs 的测试的目的。在英语中你可以阅读

if (Math.abs(dx) < 0.01) 

as if the speed of the ball in the x direction is less than 0.01 then stop the ball

作为 if the speed of the ball in the x direction is less than 0.01 then stop the ball