You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 00:49:54