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

推荐订阅源

P
Proofpoint News Feed
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
C
Check Point Blog
腾讯CDC
Stack Overflow Blog
Stack Overflow Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The GitHub Blog
The GitHub Blog
A
About on SuperTechFans
Recent Announcements
Recent Announcements
L
LangChain Blog
Microsoft Azure Blog
Microsoft Azure Blog
小众软件
小众软件
J
Java Code Geeks
博客园_首页
Jina AI
Jina AI
美团技术团队
H
Help Net Security
MyScale Blog
MyScale Blog
Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
人人都是产品经理
人人都是产品经理
Y
Y Combinator Blog
S
SegmentFault 最新的问题

博客园 - AnyCAD

ACIS SAT 文件格式详解及其解析 基于.NET开发STEP三维模型浏览器 【源码】蚁群算法TSP问题可视化 Python下的三维建模和可视化 .NET8:快速集成Rapid.NET三维控件 AnyCAD程序无法启动的问题解决方法 基于AvaloniaUI开发跨平台.NET三维应用:环境搭建 基于.NET三维控件的个性化管道软件开发 .NET6: 开发基于WPF的摩登三维工业软件 (10) - 机器人 .NET6: 开发基于WPF的摩登三维工业软件 (8) - MVVM .NET6: 开发基于WPF的摩登三维工业软件 (7) .NET6: 开发基于WPF的摩登三维工业软件 (2) .NET6: 开发基于WPF的摩登三维工业软件 .NET6: 三分钟搭建WPF三维应用 十行代码搭建基于.NET6三维应用程序 Linux下基于.NET5开发CAX应用 .NET5下的三维应用程序开发 本地Nuget包管理 基于.NET实现Matlab备用方案
基于.NET的机械运动模拟应用开发
AnyCAD · 2021-06-20 · via 博客园 - AnyCAD

1 简介

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

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

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

      N = f(t, M)

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

2 动画模拟入门

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

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

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

3 刚体动画

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

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

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

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

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

示例代码实现:Simulation_DynamicRay[4]

4 关节动画

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

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

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

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

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