Mesh位置正弦值累加偏移异常原因及指定区间振荡实现咨询
问题解析与解决方案
为什么mesh.position.y会出现大幅偏移?
你第一个例子里的变量i每次在动画循环中都会被重新赋值为2,执行i += Math.sin(time)本质等同于i = 2 + Math.sin(time),所以i的取值被限制在2±1(1到3)之间。
但mesh.position.y是Mesh对象的持久化属性,动画循环中不会自动重置初始值。你用+=操作时,是在前一帧的y值基础上持续累加Math.sin(time),这相当于对正弦函数做积分运算。随着时间推移,累加值会呈现大范围波动,最终导致y轴值偏离预期范围。
如何实现y轴在4-6之间稳定振荡?
要让初始y值为5的Mesh在4到6之间振荡,需要基于固定基准值加上缩放后的正弦值,而非累加。具体写法如下:
// 基于基准值计算,确保每次都从5出发波动 mesh.position.y = 5 + Math.sin(time);
优化:控制振荡频率
如果time是毫秒级时间戳(比如performance.now()返回值),正弦函数变化会非常快,导致振荡过于频繁。可以通过除以系数调整周期:
// 每2秒完成一次完整振荡(5→6→5→4→5) const cycle = 2000; // 周期毫秒数 mesh.position.y = 5 + Math.sin(time / cycle * 2 * Math.PI);
这样就能保证y值稳定在4到6之间,不会出现偏移或失控的情况。
内容的提问来源于stack exchange,提问作者Mr.Coder
相关产品推荐
相关产品推荐

