惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
月光博客
月光博客
Martin Fowler
Martin Fowler
人人都是产品经理
人人都是产品经理
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
T
Tailwind CSS Blog
爱范儿
爱范儿
博客园_首页
Last Week in AI
Last Week in AI
N
Netflix TechBlog - Medium
NISL@THU
NISL@THU
H
Help Net Security
A
Arctic Wolf
K
Kaspersky official blog
Y
Y Combinator Blog
G
GRAHAM CLULEY
T
Threatpost
I
Intezer
Attack and Defense Labs
Attack and Defense Labs
Jina AI
Jina AI
Recent Announcements
Recent Announcements
D
Docker
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
www.infosecurity-magazine.com
www.infosecurity-magazine.com
GbyAI
GbyAI
The Hacker News
The Hacker News
C
Cyber Attacks, Cyber Crime and Cyber Security
Help Net Security
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
G
Google Developers Blog
F
Fortinet All Blogs
S
Security Affairs
Security Archives - TechRepublic
Security Archives - TechRepublic
量子位
AWS News Blog
AWS News Blog
Google DeepMind News
Google DeepMind News
罗磊的独立博客
V
Vulnerabilities – Threatpost
阮一峰的网络日志
阮一峰的网络日志
T
Tor Project blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
H
Hacker News: Front Page
Security Latest
Security Latest
The Cloudflare Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
M
MIT News - Artificial intelligence
B
Blog
云风的 BLOG
云风的 BLOG

博客园 - osoft

Sound Disable-Download-Chrome-AI-Mode Audio-Channel DAR-PAR-SAR ffmpeg-layouts Blender-Tank-Tracks Blender-Curve Bézier-curve Bézier-VS-NURBS Walking-leg-mechanism-in-Blender Blender-Armatures Blender-Rigid-Body Platonic-solids Differential-Gear otvinta-Bevel-Gear-Calculator Bevel-gears Epicyclic-gearing Blender-Gears Blender5-WindowUI Video-file-size Windows-Execution-Policies Windows-PowerShell-prompt Windows-UAC Windows-Commands-prompt Windows-GameBar-ErrorLog Microsoft-Store-error Chrome-Gemini-Nano Windows-sfc Windows-Delivery-Optimization Windows-icacls Dism-Cleanup-image DISM-Get-cmds Windows11-GPT Generate-MAC-Address
Simulate-pendulum-motion-using-Blender
osoft · 2026-05-08 · via 博客园 - osoft
1. Pendulum
	1.1 周期公式
	1.2 摆钟
	1.3 航海钟
	1.4 秒摆和米
2. 使用Blender模拟摆运动
	2.1 秒摆-简单驱动器
	2.2 摆动画-曲线编辑器
	2.3 有点粗糙的关键帧模拟
	2.4 其他可用Blender的物理特性模拟
3. 秒摆-驱动器进阶
	3.1 带变量的驱动器公式
	3.2 设置变量 fps
	3.3 设置变量 length
	3.4 设置变量 amp
	3.5 摆插件

1. Pendulum

摆是一种实验仪器,可用来展现种种力学现象。最基本的摆由一条绳或竿,和一个锤组成。

锤系在绳的下方,绳的另一端固定。当推动摆时,锤来回移动。摆可以作一个计时器。

1.1 周期公式

摆的周期随着振幅θ₀(摆动的宽度)的增加而变长。

单摆的摆动周期取决于其长度、当地重力强度,以及摆锤偏离垂直方向的最大角度θ₀(称为振幅)。 它与摆锤的质量无关。

如果振幅被限制在较小的摆动范围内。角度远小于 1 弧度(通常认为小于 0.1 弧度,约 6°)θ₀≪1

在小角度近似下,单摆的运动可以近似为简谐运动。其中θ₀为振幅(即摆杆与竖直方向之间的最大夹角)。相应的近似周期为:

T≈2π√(L/g)

其中,L为摆长,g为当地的重力加速度。

摆长为 1米的单摆,于地表处作小角度摆动可近似为简谐运动,周期 T≈2s 这种单摆称之为秒摆。

1.2 摆钟

摆钟是以一种称为钟摆的摆动重锤为计时装置的时钟。

使用钟摆计时的优势乃是因其为一谐振子,钟摆基于其摆长以同一频率反复振动,且其振动单一而稳定。

从1656年克里斯蒂安·惠更斯正式发明摆钟以来直到20世纪30年代,基于摆钟的普遍程度,摆钟一直保持着世界上最精确的计时装置的地位。

钟表匠们意识到只有摆幅较小的摆锤(几度)才能保证走时同步,这促使罗伯特·胡克在1658年左右发明了锚式擒纵机构,将摆锤的摆动幅度缩小到4-6°。

  • 秒摆(也称皇家摆),长0.994米(39.1英寸),周期为两秒,被广泛应用于高档钟表。
  • 座钟则使用半秒摆,长度为25厘米(9.8英寸)或更短。
  • 只有少数大型塔钟使用更长的摆,例如1.5秒摆,长度为2.25米(7.4英尺),
  • 或者偶尔使用两秒摆,长度为4米(13英尺),例如大本钟使用的那种摆。

到17世纪末,秒摆的长度成为衡量某一地点重力加速度的标准。

到1700年,欧洲多个城市的秒摆长度测量精度已达到亚毫米级。

对于秒摆而言,重力加速度g与其长度成正比:g∝L

1667年,惠更斯在钟摆上加了1个齿轮,令其更加可靠,但无法在颠簸摇晃的船上使用。

最后用1具由两个弹簧推动的摆轮代替钟摆,从而造出航海钟。

1.3 航海钟

航海天文钟是一种精密计时器,安装在船上,用于通过天文导航确定船舶位置。

它通过比较格林尼治标准时间(GMT) 和根据天体观测确定的当前位置时间来确定经度。

航海天文钟最初于 18 世纪发明,是一项重大的技术成就,因为在缺乏电子或通信辅助设备的时代,精确掌握远洋航行中的时间对于有效导航至关重要。

第一台真正意义上的航海天文钟是约翰·哈里森毕生心血的结晶,他历经 31 年坚持不懈的实验和测试,彻底革新了海上(以及后来的航空)导航。

1.4 秒摆和米

Meter

在1791年法国采用公制之前的讨论中,定义新长度单位——米——的主要候选方案是北纬45°的秒摆。

这一方案由法国政治家塔列朗和数学家安托万·尼古拉·卡里塔·德·孔多塞领导的小组提出。

这是法国科学院委员会考虑的三个最终方案之一。

然而,1791年3月19日,委员会最终选择以穿过巴黎的子午线长度为基础来定义米。

秒摆的定义被否决的原因是其在不同地点存在差异,而且它是用时间单位来定义长度。

不过,自1983年以来,米的官方定义已改为以秒的长度和光速为基础。

另一个可能的原因是,激进的法国科学院不希望他们的新系统以秒为基础,因为秒是旧制度下的传统非十进制单位。

尽管米的长度并非由摆锤定义,但最终选定的米的长度——从极点到赤道的子午弧的10⁻⁷倍——与秒摆的长度(0.9937米)非常接近,误差在0.63%以内。

虽然当时并未给出选择这一特定长度的理由,但很可能是为了便于将秒摆用作辅助标准,正如官方文件中所提议的那样。

因此,现代世界的标准长度单位在历史上无疑与秒摆有着密切的联系。

最新一米定义于1983年国际度量衡大会重新制定,此次定义时使用了自然中随处可见的光,并且在70年代光速的测定已非常精确,所以最终定义为光在真空中行进299 792 458分之1秒的距离为一标准米。

故此,一旦光速得到更精准的量度,改变的数值会是米而非光速。

2. 使用Blender模拟摆运动

2.1 秒摆-简单驱动器

前面章节已经了解到秒摆的要求及状态。

1米的高度,摆动幅度介于4~6°,2秒完成一个周期。

那么就做一个2秒钟,共48帧的动画,可以做成无限重复播放的视频或动图。

周期公式: T≈2π√(L/g),其中 π2 ≈ g,所以 π ≈ √g,若L=1,那么 π√(1/g) ≈ 1,结果就是T ≈ 2s

建模

新建一个球体作为摆锤。编辑模式下顶部选取面,向上挤出,作为摆动杆。

摆锤和上方的杆是一体的,将物体原点设置到摆动杆顶端。作为旋转中心。

驱动器

#sin(frame/7.6)/11.4

  • 其中sin()是正弦函数,
  • frame是随帧数变化的全局变量。
  • 这里的: /7.6, 控制频率,大约48帧,2秒完成一个周期。
  •  /11.4, 控制振幅,大约5°。

将公式写入摆锤Y轴旋转栏位,空格播放,完成。

P4801

2.2 摆动画-曲线编辑器

Tutorial: Pendulum Waves in Blender

以下内容参考教程视频如上,视频里还加入了酷炫的材质特效,有兴趣可以去看看。

这里只记录了制作摆的过程。

3D视图拆分出一个区域,打开 曲线编辑器

选中摆锤,鼠标停留在旋转Y轴栏位上方, I 添加关键帧,在曲线编辑器里,删除x,z的旋转,只保留Y。

选中曲线编辑器,中线,G 上下移动,3D视图的物体就会左右摆动了。[ESC]

曲线编辑器,打开右侧的修改器页签,点击,添加修改器\Built in Function 内置函数

就用默认的正弦。

现在 空格 播放,物体开始疯狂摆动。修改如下2个参数值。改变振幅和频率。

  • 插值 (振幅) 0.3
  • 相位倍值 Phase Multpiter (频率) 0.1
  • 相位偏移 Phase Offset 默认0即可
  • 值偏移 Value Offset 默认0即可

好了,一个摆动画。增加一点趣味

选中物体,Shift D,复制,沿Y移动5,重复约10次

然后从第二个开始,选中第二个,修改频率,0.11

选中第三个,修改频率,0.12 … 依次修改剩余摆锤。

空格,播放...

曲线编辑器 缩放操作

鼠标滚轮,缩放曲线,

Ctrl 鼠标中键, 鼠标缩放

A 全选所有摆锤,曲线编辑器里,所有曲线都会显示出来。曲线编辑器最大化 Ctrl 空格

本例中大概在 628帧处,找到了所有摆锤曲线的重合点。

总帧数设为该数值,即可循环播放了...

2.3 有点粗糙的关键帧模拟

还是以上的建模,摆锤与摆杆一体,物体原点在摆杆顶端。

在0(Y30°),30(Y0°),60(Y-30°),90(Y0°),120(Y30°)帧处分别插入关键帧,共120帧完成一个周期。

打开曲线编辑器,关闭x,z,只保留Y旋转。

A全选时间线所有关键帧,在曲线编辑器里,缩放。可以改变摆动速度。

继续添加模拟空气阻力带来的摆动衰减。

曲线编辑器,T,设置关键帧的插值模式。

缓动(通过力度)\二次型

选中怪异曲线2端,Ctrl E,选择淡出。调整其他怪异曲线,完成。

2.4 不太好控制的物理特性模拟

上方添加一个圆柱体,设置刚体:被动,形状选 Convex Huli 凸孔。摩檫力降到0.1

该圆柱体 穿过摆锤的杆顶端,作为锚点,旋转轴。

带杆的摆锤,设置刚体: 活动,形状选 Mesh 网格。摩檫力降到0.1。灵敏度降到0

重置摆锤原点。

播放。速度有点慢。

场景面板\刚体世界环境\速率,调整为5.

播放...

摆绳可用物理引擎的布料属性。

3. 秒摆-驱动器进阶

3.1 带变量的驱动器公式

这是《Python Scripting in Blender》书籍,(第09章 动画驱动器)里的示例。书本里有详细的过程。这里只摘录关键步骤。

这里的公式与前面章节(秒摆-简单驱动器)的不同之处,在于:

  • 建模部分,顶端锚点和摆锤是分开的,其间的距离是个变量,就是周期公式里的L长度。上一节的秒摆例子是直接取了最简单的1。
  • 第二个变量是每秒的帧数,也作为变量,你可以随意设置希望的帧数。
  • 第三个变量是可以随意修改属性值,以改变摆动幅度。

这个例子可以让新手了解到如何设置自定义变量,如何添加自定义属性。驱动器里如何使用这些自定义项目。

建模:可以同上,不同之处是,不要修改摆锤的原点,让原点保留在摆锤球体中心。

在顶端新建一个空物体-空箭头,作为摆动的锚点,旋转中心。

由于摆锤的原点在锤体中心,所以,这时候旋转,会绕着锤体中心旋转,而不是上方的锚点。

添加旋转约束:选择摆锤,打开约束选项面板,添加约束: Pivot, 目标选择空对象。

将选择范围改为:Always,始终。以便所有方向的旋转都受到影响。

现在再旋转摆锤,他会绕着上方空物体锚点旋转了。

驱动器公式

#sin(frame/fps/sqrt(length/9.8))

这里的 fps,就是帧数变量。length,是摆绳长度。

将公式输入摆锤的旋转Y栏位,但并不会起作用,还要定义这2个变量才能用。

鼠标在 旋转Y栏位 上方右键菜单里 选择 编辑驱动器,打开编辑面板。

3.2 设置变量 fps

获取每秒帧数属性

单击“+添加输入变量”按钮将向驱动器添加新变量。

默认情况下,此变量的名称为var,并且是RNA属性变量——即,它从Blender中的另一个属性读取值。

  • 下方的属性栏,左边选择类型:场景;右边选择当前的场景:Scene (本示例就用默认的这一个)
  • 在下方的路径,填入: render.fps 以获取在渲染设置中设置的每秒帧数。
  • 最后别忘了将基因代码(RNA)图标右侧的当前名称var重命名为fps。

下方的数值,应该已经取到当前设置的30帧了。

现在,变量名称与驱动器表达式中使用的名称匹配,因此frame/fps是当前帧的时间,以秒为单位。

这允许下一个变量length通过基于秒的公式影响周期。

3.3 设置变量 length

使用距离变量获取摆的长度

驱动器变量有四种类型:

  1. 单一属性 Single Property
  2. 变换通道 Transform Channel
  3. 旋转差异 Rotational Difference
  4. 距离 Distance
  • 前两种,单一属性和变换通道,依赖于属性的值,
  • 而后两种,旋转差异和距离则是两个对象变换之间的差异。

在这种情况下,绳索的长度是驱动对象与其支点之间的距离——即摆锤与空对象之间的距离。

因此,我们将使用它们的距离作为长度:

单击“+添加输入变量”按钮添加新变量。

单击RNA图标将类型更改为距离。面板将更改,允许您选择两个对象。

选择摆锤和空对象,并将变量名称更改为 length。

选择了2个对象后,下方的距离值就会显示出来。

空格,播放,小球已经摆动起来了。不过摆动幅度有点大。

3.4 设置变量 amp

控制振幅

选择我们用作支点的空对象。

在对象属性面板中,找到自定义属性部分。

单击“+新建”按钮以添加属性。默认情况下,它将命名为prop。

单击齿轮图标并将属性名称更改为 amplitude。

右键单击值(默认值1.00很好),选择“复制数据路径”。["amplitude"]

这将把属性的路径复制到剪贴板。当我们添加下一个驱动器变量时,这将很有用。

在驱动器中使用自定义属性

选择摆锤,打开旋转轴驱动公式的编辑驱动器面板。

单击“+添加输入变量”,并将新变量命名为amp。

单击类型选择 物体,选择空对象作为属性对象。

单击Path:字段并使用Ctrl + V粘贴存储在剪贴板中的数据路径,或输入["amplitude"]。方括号是自定义属性Python路径的一部分。

我们可以直接将* amp添加到驱动器表达式中,但我们可以做得更好:由于驱动器影响旋转,我们还可以将π添加到乘法中:

sin(frame / fps / sqrt(length/9.8)) * amp * pi

正弦函数在-1.0和1.0之间振荡,因此当幅度设置为1.0时,我们的驱动器结果在-π到π之间变化。

从0.0(静止摆动)到1.0(完整旋转)的控制对动画师和3D用户具有直接意义,因为它允许他们通过更改幅度设置所需的圆的分数。

到此,一个完整的摆动画驱动完成了,可以按需要修改3个变量的参数,以适应需求。

3.5 摆插件

编写一个插件,为活动对象设置摆。

这是书籍带的插件代码,书中详述了过程,有兴趣的可以查阅书籍内容。

下载安装插件后,即可使用。

在对象模式中,选择一个对象使其处于活动状态。

右键单击并选择“Make Pendulum”以调用插件。

在左下角操作符属性中设置长度和幅度的值。