Javascript 为什么距离的指数衰减会导致99[精确]的一次性误差?
我正在研究一种效果,在这种效果中,主要描述中的角色被包裹在自己的跨度中,从他们通常的休息位置移动到一个随机位置,然后通过指数衰减更接近他们的目的地。JavaScript内联在页面中 JavaScript控制台显示调试输出:许多相同的日志行: starting_x:833 starting_y:275.875 target_x:833 target_y:176.875 new.html:74 然后报告最大调用堆栈深度。不知何故,代码使所谓的指数衰减停滞在99的精确差,并变成无限递归(当距离衰减到x和y之间小于两个像素时,衰减被宣告停止) 预期行为是:Javascript 为什么距离的指数衰减会导致99[精确]的一次性误差?,javascript,recursion,infinite-loop,jquery-effects,Javascript,Recursion,Infinite Loop,Jquery Effects,我正在研究一种效果,在这种效果中,主要描述中的角色被包裹在自己的跨度中,从他们通常的休息位置移动到一个随机位置,然后通过指数衰减更接近他们的目的地。JavaScript内联在页面中 JavaScript控制台显示调试输出:许多相同的日志行: starting_x:833 starting_y:275.875 target_x:833 target_y:176.875 new.html:74 然后报告最大调用堆栈深度。不知何故,代码使所谓的指数衰减停滞在99的精确差,并变成无限递归(当距离衰减到x
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);
}
}
功能行程(索引、起始时间、起始时间、目标时间、,
目标不透明度,起始不透明度,目标不透明度,延迟,基数)
{
如果(1 | | | isNaN(起始| x)| | isNaN(起始| y)| | isNaN(目标| x)| isNaN(目标|y))
{
console.log('starting_x:'+starting_x+
'起始y:'+起始y+'目标x:'+
target_x+“target_y:”+target_y);
//返回;
}
/*log(target_x-starting_x+','+(target_y-
开始);*/
if(Math.abs(starting_x-target_x)+Math.abs(starting_y-
目标(y)<2)
{
jQuery(“#text_uu”+index).css({'left':target_x,'top':
目标_y,“不透明度”:目标_不透明度,'-ms过滤器':
'progid:DXImageTransform.Microsoft.Alpha(不透明度='+
目标透明度*100,'过滤器':'α(透明度='+
目标(不透明度*100});
}
其他的
{
如果(开始\u x-目标\u x>0)
{
var new_x=(目标_x+数学地板((起始_x-
目标(x)*基数);
}
其他的
{
var new_x=(target_x+Math.ceil)((starting_x-
目标(x)*基数);
}
如果(开始\u x-目标\u x>0)
{
var new_y=(target_y+Math.floor)((start_y-
目标(y)*基数);
}
其他的
{
var new_y=(target_y+Math.ceil)((start_y-
目标(y)*基数);
}
var new_opacity=目标_opacity+(开始_opacity
-目标_不透明度)*基数;
旅程(索引、新x、新y、目标x、目标y、,
新不透明度、目标不透明度、延迟、基数);
}
}
对不起,误读了代码。您传入的基数值是多少
此外,如果您只有一个代码,那么代码将更容易阅读
if (starting_x - target_x > 0)
有条件。对不起,误读了代码。您要传入的基数值是多少 此外,如果您只有一个代码,那么代码将更容易阅读
if (starting_x - target_x > 0)
有条件。对不起,误读了代码。您要传入的基数值是多少 此外,如果您只有一个代码,那么代码将更容易阅读
if (starting_x - target_x > 0)
有条件。对不起,误读了代码。您要传入的基数值是多少 此外,如果您只有一个代码,那么代码将更容易阅读
if (starting_x - target_x > 0)
有条件的。谢谢;你挑出的让人困惑的地方就是罪魁祸首。输入的基数I的值是.99,在给定的情况下,-99的数字乘以基数,得到-98.01,然后因为我在第二个条件中有另一个维度,Math.floor()我注意到了你的把手,有关于亚瑟王的“儿子和侄子,莫德雷德”的讨论在《谢谢你》中,你挑出的令人困惑的一点是罪魁祸首。我传入的基数值是.99,在给定的例子中,-99的数字乘以基数,得到-98.01,然后因为我在第二个条件中有另一个维度,Math.floor()我注意到了你的把手,有关于亚瑟王的“儿子和侄子,莫德雷德”的讨论在《谢谢你》中,你挑出的令人困惑的一点是罪魁祸首。我传入的基数值是.99,在给定的例子中,-99的数字乘以基数,得到-98.01,然后因为我在第二个条件中有另一个维度,Math.floor()我注意到了你的把手,有关于亚瑟王的“儿子和侄子,莫德雷德”的讨论在《谢谢你》中,你挑出的令人困惑的一点是罪魁祸首。我传入的基数值是.99,在给定的例子中,-99的数字乘以基数,得到-98.01,然后因为我在第二个条件中有另一个维度,Math.floor()我注意到了你的把手,这里讨论了亚瑟王的命运