1 简介

机械运动在物理学中,把一个物体相对于另一个物体位置的变化称作为机械运动,简称运动。机械运动是指一个物体相对于其他物体的位置发生改变,是自然界中最简单,最基本的运动形态.

自然界中一切物体都在运动。我们利用计算机建立的几何模型怎么能静止不动?

在计算机图形学中,我们可以使用矩阵变换来描述物体位置的变化(包括位移、旋转、缩放、镜面等)。在显示每一帧的序列中不断更改物体的位置,就可以实现运动模拟,或者动画。可以用一个时间函数来描述:

      N = f(t, M)

给定一个初始的矩阵M,随着时间t的变化,产生新的矩阵N。至于函数f是匀速直线运动还是曲线运动,完全由你掌控。俗话说的好,牛顿三大定律在手,运动模拟不愁~

2 动画模拟入门

匀速直线运动太简单了,一般图形学的课程都会介绍稍微复杂点的例子:月亮、地球、太阳的运动模拟,涉及到星体的公转和自转,即相对运动、旋转。如何使用矩阵来实现,在《​​图形学基础:向量与矩阵​​​》和《​​矩阵应用之运动轨迹模拟​​》两篇文章中有比较详细的说明。具体的代码可以参考AnyCAD Rapid示例: Graphics_Motion[1]

基于.NET的机械运动模拟应用开发_.net

上面的示例比较“原始”,因为直接设置SceneNode的矩阵。直接操作矩阵你可以随心所欲组合任意的变换,但缺点也很明显:当动画多了以后,动画序列的管理就成问题。比如实现一个六轴机器人关节模拟,代码逻辑写起来就很复杂了。好消息是,AnyCAD Rapid内置了关节运动模拟,请参考示例Simulation_Robot[2]和示例Simulation_Skeleton[3]

基于.NET的机械运动模拟应用开发_git_02

AnyCAD Rapid SDK目前提供了两类动画序列管理的方法:刚体动画和关节动画。基于这两个辅助类可以很容易实现连续动画,多段动画前后连着播放。

3 刚体动画

刚体运动(rigid motion): 对几何物体只作旋转, 平移的运动。

RigidAnimation用于管理刚体运动的动画片段。

RigidAnimationClip是动画片段的基类,具体的动画片段有:

•匀速旋转运动RotateAnimationClip•匀速直线运动MoveAnimationClip•复合运动MatrixAnimationClip

每一段动画片段定义了起始时间和结束时间,在这段时间内需要完成的匀速运动。这里的时间都是相对RigidAnimation开始播放的开始的,单位为秒。若在中间有段时间是静止的,则在两段序列之间空出一段时间即可。

基于.NET的机械运动模拟应用开发_git_03

示例代码实现:Simulation_DynamicRay[4]


4 关节动画

关节动画主要用于N轴机械臂模拟。RobotArm用于构建机器关节模型,RobotAnimation则用于管理关节运动序列。RobotAnimationClip代表了一段关节运动序列。

RobotAnimationClip控制的是在一段时间内,某个关节的参数的变化区间。如果是转动关节,则表示的是角度参数的运动区间;如果是位移关节,则表示的是距离参数的区间。

Animation与Clip的关系与刚体动画的一致。

示例:代码实现: Simulation_Robot[5]

基于.NET的机械运动模拟应用开发_.net_04

5 小结

动画模拟是个复杂的课题。本文从简单的匀速运动出发,一览AnyCAD Rapid SDK的动画系统的使用。若对形变动画感兴趣,可以参考往期的文章《​​一种快速钣金折弯动画模拟实现方法​​》

 

 若你有复杂的机械运动模拟需求,欢迎与我们联系交流。

生命在于运动,机械在于运动!让我们一起动起来~

 

References

​[1]​​ Graphics_Motion: ​https://gitee.com/anycad/anycad.rapid.net.sample/blob/master/AnyCAD.WinForms/Graphics/Graphics_Motion.cs​
​​​[2]​​ Simulation_Robot: ​https://gitee.com/anycad/anycad.rapid.net.sample/blob/master/AnyCAD.WinForms/Simulation/Simulation_Robot.cs​
​​​[3]​​ Simulation_Skeleton: ​https://gitee.com/anycad/anycad.rapid.net.sample/blob/master/AnyCAD.WinForms/Simulation/Simulation_Skeleton.cs​
​​​[4]​​ Simulation_DynamicRay: ​https://gitee.com/anycad/anycad.rapid.net.sample/blob/master/AnyCAD.WinForms/Simulation/Simulation_DynamicRay.cs​
​​​[5]​​ Simulation_Robot: ​https://gitee.com/anycad/anycad.rapid.net.sample/blob/master/AnyCAD.WinForms/Simulation/Simulation_Robot.cs​