gemini pro 3 太强大了:
我从去年开始就在思考一个问题,如何用代码来模拟精子的运动。我发现,很多原来的大模型模拟所谓的“精子”或者“蝌蚪”运动,往往要么是僵硬的棍子在摆动(像钟摆),要么是尾巴和头分离,要么是波动的物理感极差。运动方向也是一言难尽。
为什么这很难,我发现这些大模型在处理这种几何动画时,通常会跌入到一些“思维陷阱”:
很多模型试图直接计算尾巴上每一个点在屏幕上的绝对坐标 $(x, y)$。后果:这需要极复杂的三角函数。它需要计算:头的角度、尾巴每一节相对于头的角度、再叠加上头的位移... 一旦公式里少了一个 Math.cos(headAngle),尾巴就会在精子转身时“断掉”或者飞到原本位置的垂直方向去。Deepseek 3.1 在处理这个问题的时候把精子的尾巴变成了简单的正弦或者余弦波动。Claude 4 直接的变成了震动的小棍子,像是一个坏掉的节拍器
不管是如何反复的修改,大部分大模型无法区分“摆动”与“波动” (Pendulum vs. Wave)
没有大模型能够理解振幅梯度 (Amplitude Gradient),他们会让尾巴所有部分的摆动幅度都一样。最后让摆动看起来像一条蛇,而不像精子。精子的鞭毛在连接头部的根部是非常稳,越往末端摆动幅度越大。如果根部摆动太大,头就会看起来在剧烈震动,失去了“流体中的阻尼感”。
Gemini pro3 完美的解决了上面的问题:
他构建了一个行波方程 (The Traveling Wave),一行代码,完成了三个关键的物理细节:
let ty = Math.sin(i * 0.5 - this.tailPhase) * swingAmp * (i / 15);
三个关键的物理细节,缺一不可:
i * 0.5 (空间频率):代表波浪的密集程度。没有它,尾巴就是直上直下平移
- this.tailPhase (时间相位):这是让死波变成活波的关键。通过每一帧改变 tailPhase,正弦波的波峰就会向后移动,产生“推进力”的视觉错觉。
* (i / 15) (振幅渐变):这是注入灵魂的一笔。当 i=0 (连接头部处),振幅为 0。这意味着脖子是不动的。
当 i=15 (尾尖),振幅最大。
这模拟了鞭毛的真实物理特性:根部强壮僵硬,末端柔软甩动。
没有其他大模型能够想到这些细节。绝大部分的大模型试图用代数(硬算坐标)来解决一个几何与拓扑(坐标变换)的问题
gemini3 想到了。