我真的很纠结于javascript的正弦和余弦函数是多么缓慢和低效。我正在用p5.js webgl制作一款第一人称射击游戏,这确实造成了大量的延迟。
谁能告诉我如何找到一个角只有一个的正弦/余弦?或者至少告诉我一个更有效的方法?
所以从字面上看,我试图重新创建Math.cos
和Math.sin
函数,只是简单地运行更快。
如果你的度数只是0-359范围内的整型度数,你可以在数组中缓存sin/cos的结果,其中度数是数组的索引:
const pi180 = (Math.PI/180);
const angles =[...new Array(360).fill(0)].map((_,i) => ({
cos: Math.cos(i * pi180),
sin: Math.sin(i * pi180)
}));
console.log(angles);
例如,如果你想要cos 32度它会是angles[32].cos
使用弧度很难做到这一点,因为你处理的是浮点值,你需要一种方法来截断或插值值之间。
关于您认为cos
/sine
是您的瓶颈的简短评论:这不太可能。更有可能的是,你在不必要的时候不断调用数学函数。检查你的代码,确保你只在事情发生变化时才计算,而不是在动画的每个关键帧上计算,并且你只使代码中实际发生变化的部分无效。