当前位置: 首页 > news >正文

Python 数学公式构建海洋不明生物(好像是水母)动画 - 简谐振动

Python 数学公式构建海洋不明生物(好像是水母)动画 - 简谐振动

flyfish

效果展示与源码

可以先欣赏下海洋不明生物(好像是水母)的动画

代码绘制效果如下图
在这里插入图片描述

哎,咱先不说那些公式啊,先说个直观感受——你看那动画里的水母,一荡一荡的,不像硬邦邦的机器,倒真像在水里飘着,触手还轻轻颤,这股“活劲儿”哪儿来的?跟咱们小时候玩的弹簧玩具、家里挂的钟摆,是一个底层逻辑,叫啥“简谐振动”。

一、简谐振动(SHM)

简谐振动(Simple Harmonic Motion,简称SHM)是自然界最基础的周期性运动形式,也是水母动画中“振动感”的理论根源。它描述了物体在平衡位置附近的往复运动。
Harmonic 的意思
日常语境:形容关系、声音、色彩等的和谐感,比如 “harmonic relationship”(和谐的关系)、“harmonic sounds”(悦耳协调的声音)。
抽象语境:强调 “规律性、协调性”,比如 “harmonic balance”(调和平衡)
不同场景

领域含义典型搭配/例子
日常/通用和谐的、协调的harmonic atmosphere(和谐氛围)
物理学谐波的、谐频的(周期性振动成分)harmonic motion(谐运动)、harmonics(谐波)
音乐泛音的、和声的harmonic series(泛音列)、harmony(和声)
数学调和的、谐波函数harmonic sequence(调和序列)

1. 定义

简谐振动的本质是线性恢复力作用下的往复运动:当物体偏离平衡位置时,会受到一个与位移成正比、方向相反的“恢复力”,这个力会将物体拉回平衡位置,进而引发周期性振荡。

关键物理条件:恢复力满足胡克定律(Hooke’s Law),数学表达式为:
F=−kxF = -kxF=kx
其中,FFF 是恢复力,kkk 是刚度常数(反映“恢复能力”强弱),xxx 是物体偏离平衡位置的位移,负号表示力的方向与位移相反(始终指向平衡位置)。

基本特征

  • 周期性:运动重复循环,完成一次完整振荡的时间(周期)固定。
  • 对称性:从平衡位置到两侧最大位移(振幅)的距离相等。
  • 加速度特性:加速度始终与位移反向且成正比(a=−ω2xa = -ω²xa=ω2xωωω 为角频率),确保运动的往复性。
  • 周期独立性:理想情况下,周期与振幅无关(例如小角度单摆,无论摆幅大小,周期基本不变)。

2. 参数

简谐振动的运动规律可通过二阶线性微分方程推导,其解为正弦或余弦函数,这也是动画中“平滑振动”的数学基础。

(1)微分方程与通解

根据牛顿第二定律(F=maF = maF=ma),结合胡克定律可推导出简谐振动的微分方程:
d2xdt2+ω2x=0\frac{d²x}{dt²} + ω²x = 0dt2d2x+ω2x=0
其中,ω=kmω = \sqrt{\frac{k}{m}}ω=mk 称为角频率mmm 为物体质量),反映振动的“快慢”。

方程的通解(即位移随时间的变化规律)为:
x(t)=Asin⁡(ωt+φ)x(t) = A\sin(ωt + φ)x(t)=Asin(ωt+φ)x(t)=Acos⁡(ωt+φ)x(t) = A\cos(ωt + φ)x(t)=Acos(ωt+φ)

两种形式本质一致(仅初相位相差 π2\frac{π}{2}2π),实际应用中可根据初始条件选择。

(2)参数解析

通解中的参数直接决定了振动的“形态”,也是动画中可调节效果的关键

参数符号名称物理含义动画中作用
AAA振幅物体偏离平衡位置的最大距离(正数),反映振动的“强度”或“范围”。控制抖动/脉冲的幅度(如水母抖动的剧烈程度,振幅越大,摆动越明显)。
ωωω角频率单位时间内振动的角度变化(单位:弧度/秒),ω=2πf=2πTω = 2πf = \frac{2π}{T}ω=2πf=T2π控制振动的“快慢”(fff 为频率,TTT 为周期),ωωω 越大,振动越急促。
ttt时间运动的时间累积,是振动随时间演变的变量。动画中对应“帧数”(每帧对应固定时间间隔),确保振动的连续性。
φφφ初相位振动的初始角度(单位:弧度,取值范围 000~2π2π2π),反映振动的“起始状态”。避免多个物体振动同步(如两只水母的抖动错开),增加运动的自然感。

3. 振动持续

理想简谐振动是保守系统(无能量损耗),总能量始终守恒,这解释了振动为何能“持续往复”而不停止。

能量构成

  • 势能 UUU:由位移产生(如弹簧的弹性势能),U=12kx2U = \frac{1}{2}kx²U=21kx2,在最大位移处(x=±Ax=±Ax=±A)势能最大,动能为零。
  • 动能 KKK:由速度产生,K=12mv2K = \frac{1}{2}mv²K=21mv2,在平衡位置(x=0x=0x=0)速度最大,动能最大,势能为零。
  • 总能量 EEEE=K+U=12kA2E = K + U = \frac{1}{2}kA²E=K+U=21kA2(恒定不变)。

现实中存在摩擦等能量损耗(阻尼),振动振幅会逐渐衰减(称为“阻尼振动”)。其是在微分方程中加入阻尼项 bmdxdt\frac{b}{m}\frac{dx}{dt}mbdtdxbbb 为阻尼系数),动画中常用此原理实现“平滑转向”(如水母碰撞边界时抖动幅度减弱)。

二、从物理模型到振动效果

动画中的“振动”本质是对简谐振动的简化与适配——无需严格遵循物理定律,只需借用其“正弦函数平滑周期性”的特征,通过调节参数实现自然的视觉效果。

1. 动画中振动的逻辑

简谐振动的通解 x(t)=Asin⁡(ωt+φ)x(t) = A\sin(ωt + φ)x(t)=Asin(ωt+φ) 可直接转化为动画中的“位置偏移公式”:
偏移量 = 振幅 × 正弦(角频率 × 时间 + 初相位) × 动态系数

其中“动态系数”是动画特有的扩展(如阻尼、转向衰减),用于增强真实感。这个公式的优势在于:

  • 正弦函数输出范围为 [−1,1][-1,1][1,1],偏移量可控且无跳变,视觉上平滑自然。
  • 参数独立可调,可分别控制“强度”(振幅)、“快慢”(频率)、“起始状态”(相位),灵活度高。

2. 关键参数的动画映射

物理模型中的参数在动画中被具象化为可调节的“效果参数”

物理参数动画映射参数代码中对应变量示例效果说明
振幅 AAA抖动强度/脉冲幅度motionscalemotion_scalemotionscalepulseamppulse_amppulseampmotionscale=2motion_scale=2motionscale=2 表示抖动最大偏移2像素;pulseamppulse_amppulseamp 控制圆周运动的振荡范围。
频率 fff抖动速度/颜色变化速度pulsefreqpulse_freqpulsefreqcolorchangespeedcolor_change_speedcolorchangespeedpulsefreq=0.2pulse_freq=0.2pulsefreq=0.2 表示每秒脉冲0.2次;colorchangespeed=1.0color_change_speed=1.0colorchangespeed=1.0 控制颜色脉动频率。
初相位 φφφ初始偏移phasephasephase随机生成 phasephasephase000~2π2π2π),使两只水母抖动不同步。
阻尼系数 bbb转向衰减速度turnampdecayturn_amp_decayturnampdecayminampmin_ampminamp转向时抖动幅度每帧衰减 0.050.050.05,最低至 0.20.20.2,避免运动突兀。

三、水母振动

水母动画的“振动感”是多层简谐振动的叠加,包括自身抖动、脉冲运动、转向平滑三大效果,每一层都基于上述原理实现。

1. 自身抖动(Jitter):模拟触手摆动

自身抖动是水母“活起来”的基础,通过在x、y方向分别叠加简谐振动,产生类似水中漂浮的颤动效果。

(1)实现公式
  • x方向抖动:jitterx=sin⁡(2t+φ)×motionscale×currentampjitter_x = \sin(2t + φ) × motion_scale × current_ampjitterx=sin(2t+φ)×motionscale×currentamp
  • y方向抖动:jittery=cos⁡(1.5t+φ)×motionscale×currentampjitter_y = \cos(1.5t + φ) × motion_scale × current_ampjittery=cos(1.5t+φ)×motionscale×currentamp
(2)参数解析与效果
  • 频率差异:x方向用 2t2t2t(频率约 0.3180.3180.318 Hz),y方向用 1.5t1.5t1.5t(频率约 0.2390.2390.239 Hz),不同方向频率不同,模拟“无规则”的自然摆动(避免机械感)。
  • 动态幅度currentampcurrent_ampcurrentamp 是随转向变化的动态系数(初始1.0,转向时衰减到 minamp=0.2min_amp=0.2minamp=0.2,再逐渐恢复),实现“碰撞时收束、平稳后舒展”的真实感。
  • 视觉效果:水母整体轻微颤动,触手部分因点的分布差异,摆动效果更明显。

2. 脉冲运动(Pulse):优化圆周轨迹

水母的基础运动是圆周运动,但纯圆形轨迹生硬,通过在“圆周角度”上叠加简谐振动,使轨迹产生微波浪状起伏。

(1)实现公式
  1. 计算角频率:w=2π×pulsefreqw = 2π × pulse_freqw=2π×pulsefreqpulsefreq=0.2pulse_freq=0.2pulsefreq=0.2 为基础频率)
  2. 脉冲角度偏移:pulseadd=pulseampw×sin⁡(wt)pulse_add = \frac{pulse_amp}{w} × \sin(wt)pulseadd=wpulseamp×sin(wt)
  3. 最终圆周角度:currentangle=baseangle+pulseaddcurrent_angle = base_angle + pulse_addcurrentangle=baseangle+pulseadd
(2)效果逻辑
  • pulseamppulse_amppulseamp 基于圆周运动速度(如 circlespeed1×0.5circle_speed1 × 0.5circlespeed1×0.5),确保脉冲幅度与运动速度匹配。
  • 当水母碰撞边界时,pulseamppulse_amppulseamp 反向(×=−1×=-1×=1),模拟“反弹”时的脉冲方向变化,增强物理感。

3. 转向平滑:阻尼振动的应用

当水母接近画布边界时,需通过“转向”避免超出范围,此处借用阻尼振动原理,让抖动幅度平滑衰减再恢复,避免运动突兀。

(1)实现逻辑
  1. 边界检测:计算“拟议位置”(proposedx/yproposed_x/yproposedx/y),若接近边界(<margin+5<margin+5<margin+5>canvassize−margin−5>canvas_size-margin-5>canvassizemargin5),触发转向。
  2. 幅度衰减:设置 isturning=Trueis_turning=Trueisturning=Truecurrentampcurrent_ampcurrentamp 每帧减少 turnampdecay=0.05turn_amp_decay=0.05turnampdecay=0.05,直至 minamp=0.2min_amp=0.2minamp=0.2(转向时抖动减弱)。
  3. 恢复过程:转向结束后,currentampcurrent_ampcurrentamp 每帧增加 0.050.050.05,恢复至1.0(抖动强度复原)。
(2)目的

通过阻尼项模拟“能量损耗与恢复”,让转向过程从“急停反转”变为“缓慢收束再舒展”,符合真实生物的运动逻辑。

4. 颜色振动:视觉效果的延伸

除位置振动外,颜色变化也采用简谐振动原理,通过调节亮度实现“脉动感”,与位置振动形成呼应。

(1)实现公式
  1. 亮度系数:colorval=sin⁡(colorfreq×t+φ)×0.5+0.5color_val = \sin(color_freq × t + φ) × 0.5 + 0.5colorval=sin(colorfreq×t+φ)×0.5+0.5(将正弦输出 [−1,1][-1,1][1,1] 映射到 [0,1][0,1][0,1]
  2. 最终颜色:colors=basecolors×(0.6+0.4×colorval)colors = base_colors × (0.6 + 0.4×color_val)colors=basecolors×(0.6+0.4×colorval)
(2)效果解析
  • colorfreqcolor_freqcolorfreq 控制颜色脉动速度(如第一只水母 1.01.01.0、第二只 0.80.80.8),与位置抖动频率错开,避免视觉单调。
  • 亮度变化范围为基础亮度的 60%60\%60%~100%100\%100%,变化柔和不刺眼,增强水母的“生物感”。

借用简谐振动的正弦函数周期性,确保运动平滑无跳变(避免随机噪声的杂乱感)将物理参数(振幅、频率、相位)转化为直观的动画参数(抖动强度、速度、初始偏移),方便调节效果。位置抖动、轨迹脉冲、颜色脉动分别对应不同的简谐振动模型,叠加后形成丰富的自然运动。通过阻尼衰减(转向时幅度变化)、随机相位(多物体不同步)等细节,弥补理想物理模型的“机械感”。

http://www.dtcms.com/a/415013.html

相关文章:

  • 宁波市江北区建设局网站上海php网站开发
  • Linux面试题及详细答案 120道(61-75)-- 文件系统与存储
  • 韶关住房和城乡建设局网站气血不足做网站
  • 橱柜网站建设公司建设网站的收费
  • 融资路演 AI 速成 72 小时实战指南(抓风口→做PPT→补漏洞)
  • JUC并发编程:共享模型之管程与悲观锁(synchronized)详解
  • php基础-文件包含(第13天)
  • STM32智能加湿器
  • 网站开发管理nodejs网站开发教程
  • webrtc弱网-TrendlineEstimator类源码分析与算法原理
  • RocketMQ 消息堆积:快速定位、处理与预防方案
  • 深圳网站建设制作开发咨询邯郸网站建设
  • P3051题解
  • 想给孩子找点题做 都有什么网站化学课件
  • 【2026计算机毕业设计】基于Springboot的汉服交流的微信小程序
  • uutils coreutils - GNU coreutils 的 Rust 跨平台实现
  • 如何在阿里巴巴上做网站去哪网站备案吗
  • 软考中级-软件设计师(五)
  • 零基础学Docker(5)--容器数据卷
  • list列表
  • 团购网站做摄影网站编程开发
  • Kurt-Blender零基础教程:第4章:粒子篇
  • Qt常用控件之QTextEdit
  • ImageHash - Python 图像哈希库
  • 初识 Vue
  • 做网站销售水果上海建设安全协会网站
  • 正能量视频素材免费下载网站现代营销手段有哪些
  • Prj11-8088单板机C语言大综合(一)
  • 44.网络层
  • 肇庆网站制作软件郑州企业网络推广公司