我已经看到了许多有关javascript中的模拟和动画的问题,这些问题通常涉及计算斜边:

hypot = Math.sqrt(x*x + y*y);

由于笛卡尔坐标是大多数此类引擎中选择的武器,因此需要进行这些计算才能找到点对之间的距离等。因此,计算斜边的任何加速都可能对许多项目有很大帮助。

为此,您能看到比上述简单实现更快的方法吗?我发现基于this approximation function in SuperCollider的近似值在Chrome中略快一些,但在Firefox中却慢得多。

编辑2015-08-15:我已将接受的答案切换为Math.hypot;我怀疑当前的实用方法是使用Math.hypot或合成的hypot函数(如果不可用),并与平方(按sch的答案)进行比较(如果足够)并且Math.hypot不可用。

最佳答案

在ECMAScript ES6中,您可以使用 Math.hypot :

// ES5 support

Math.hypot = Math.hypot || function(x, y){ return Math.sqrt(x*x + y*y) }

var x = 3, y = 4;

document.write(Math.hypot(x, y))


编辑:您可以在空白选项卡上运行此测试,两种方法都进行了200万次操作,结果非常好,速度提高了24%。
var i, tmp, x = 55, y = 66, end, ini = performance.now();

// Math.sqrt operation
i = 0;
ini = performance.now();
tmp = 0;
while(i++ < 2000000){
    tmp += Math.sqrt(x*x + y*y)
}
end = performance.now();
console.log(tmp, "Math.sqrt operation: " + (end - ini) + " ms");

// Math.hypot

i = 0;
ini = performance.now();
tmp = 0;
while(i++ < 2000000){
    tmp += Math.hypot(x, y)
}
end = performance.now();

console.log(tmp, "Math.hypot: " + (end - ini) + " ms");

注意:在此测试中,它使用了ES6的 Math.hypot

关于javascript - JavaScript中最快的斜边?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10140604/

10-10 22:02