javascript - 为什么距离的这种指数衰减会导致 99 [精确] 的一次性误差?

标签 javascript recursion infinite-loop jquery-effects

我正在 http://classicorthodoxbible.com/new.html 上制作效果主要描述中的 Angular 色,包裹在自己的跨度中,从他们通常的休息地点移动到随机位置,然后通过指数衰减更接近他们的目的地。 JavaScript 内联在页面中。

JavaScript 控制台显示调试输出:许多相同的记录行:

起始_x:833起始_y:275.875目标_x:833目标_y:176.875新.html:74

随后报告最大调用堆栈深度。不知何故,代码使本来应该是指数衰减的东西陷入了精确的 99 差值,并变成了无限递归(当 x 和 y 之间的距离衰减到小于两个像素时,衰减是按法令声明停止的)。

预期的行为是:

  1. 生成标记输出,其中每个呈现的输出字符(即非标签)都在其自己的 SPAN 中。

  2. 将每个 Angular 色移动到自己的位置。

  3. 将它们线性地移向初始和最终的静止位置,使得当前位置和目标位置之间的距离呈指数衰减。

处理所有点移动(并具有无限递归)的函数如下:

            function journey(index, starting_x, starting_y, target_x,
              target_y, starting_opacity, target_opacity, delay, radix)
                {
                if (1 || isNaN(starting_x) || isNaN(starting_y) || isNaN(target_x) || isNaN(target_y))
                    {
                    console.log('starting_x: ' + starting_x +
                      ' starting_y: ' + starting_y + ' target_x: ' +
                      target_x + ' target_y: ' + target_y);
                    // return;
                    }
                /* console.log(target_x - starting_x + ', ' + (target_y -
                  starting_y)); */
                if (Math.abs(starting_x - target_x) + Math.abs(starting_y -
                  target_y) < 2)
                    {
                    jQuery('#text_' + index).css({'left': target_x, 'top':
                      target_y, 'opacity': target_opacity, '-ms-filter':
                      'progid:DXImageTransform.Microsoft.Alpha(Opacity=' +
                      target_opacity * 100, 'filter': 'alpha(opacity=' +
                      target_opacity * 100});
                    }
                else
                    {
                    if (starting_x - target_x > 0)
                        {
                        var new_x = (target_x + Math.floor((starting_x -
                          target_x) * radix));
                        }
                    else
                        {
                        var new_x = (target_x + Math.ceil((starting_x -
                          target_x) * radix));
                        }
                    if (starting_x - target_x > 0)
                        {
                        var new_y = (target_y + Math.floor((starting_y -
                          target_y) * radix));
                        }
                    else
                        {
                        var new_y = (target_y + Math.ceil((starting_y -
                          target_y) * radix));
                        }
                    var new_opacity = target_opacity + (starting_opacity
                      - target_opacity) * radix;
                    journey(index, new_x, new_y, target_x, target_y,
                      new_opacity, target_opacity, delay, radix);
                    }
                }

最佳答案

抱歉,看错代码了。您传入的基数的值是多少?

此外,如果您只有一个,代码会更容易阅读

if (starting_x - target_x > 0)

有条件。

关于javascript - 为什么距离的这种指数衰减会导致 99 [精确] 的一次性误差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21371033/

相关文章:

java - 递归划分正方形区域

javascript - 为什么这个函数返回真?

recursion - Scheme中基本if表达式的修改。为什么会进入死循环?

c - 为什么第一个是无限循环?

javascript - TypeORM:如何查询与字符串数组输入的多对多关系以查找所有字符串都应存在于相关实体列中的实体?

javascript - 获取路由中的内容 - Nodejs

javascript - 从 MVC 项目中的操作返回的 HTML 文件中的脚本路径不正确

php - 将textarea中的html标签转换为富文本

javascript - JavaScript 语法部分的左因式分解

C代码进入死循环