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

基于.NET的机械运动模拟应用开发的更多相关文章

  1. 基于C#和Asp.NET MVC开发GPS部标监控平台

    基于交通部796标准开发部标监控平台,选择开发语言和技术也是团队要思考的因素,其实这由团队自己擅长的技术来决定,如果擅长C#和Asp.NET, 当然开发效率就高很多.当然了技术选型一定要选用当前主流的 ...

  2. qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统

    qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和linux kernel,达到与开发板上一样的学习效果! 虽然已经买了2440开发板,但是在实际学习 ...

  3. qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统【转】

    转自:http://www.cnblogs.com/riskyer/p/3366001.html qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和l ...

  4. 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】

    转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...

  5. 基于C#和Asp.NET MVC开发GPS部标视频监控平台

    基于C#和Asp.NET MVC开发GPS部标监控平台 目前整理了基于.NET技术的部标平台开发文章,可以参考: 1.部标Jt808协议模拟终端的设计和开发 2.C#版的808GPS服务器开发-> ...

  6. 转: 基于netty+ protobuf +spring + hibernate + jgroups开发的游戏服务端

    from: http://ybak.iteye.com/blog/1853335 基于netty+ protobuf +spring + hibernate + jgroups开发的游戏服务端 游戏服 ...

  7. cWeb开发框架,基于asp.net的cWeb应用开发平台介绍(二)

    cWeb是基于微软的.Net Framework 4框架,数据库是sql server 2008 r2. cWeb开发框架下载,点击这里去下载. cWeb开发框架借鉴三层架构理论分为三层,分别是:cD ...

  8. cWeb开发框架,基于asp.net的cWeb应用开发平台介绍(一)

    cWeb开发框架是基于asp.net的B/S应用开发平台,采用三层架构理论,应用简单.代码简洁.运行快速. cWeb是bubufx提供,是分享资源,无任何版权限制,bubufx继续传承互联网精神,可随 ...

  9. 基于Netty的私有协议栈的开发

    基于Netty的私有协议栈的开发 书是人类进步的阶梯,每读一本书都使自己得以提升,以前看书都是看了就看了,当时感觉受益匪浅,时间一长就又还回到书本了!所以说,好记性不如烂笔头,以后每次看完一本书都写一 ...

  10. 基于微软平台IIS/ASP.NET开发的大型网站有哪些呢?

    首先说明一下,本文绝不是要说Microsoft平台多么好,多么牛.只是要提醒一些LAMP/JAVA平台下的同志们,微软平台不至于像你们说的,和想象的那么不堪!只是你们自己不知道而已.同时,也希望广大M ...

随机推荐

  1. 【HZERO】消息发送

    消息发送 https://open.hand-china.com/community/detail/625843016338378752 新建模板 @Override public String sh ...

  2. POJ 1011 Sticks​ (DFS + 剪枝)

    题目地址:http://poj.org/problem?id=1011 题目大意 给出n个小木棒,组合成若干长度最短棍子 解题思路 首先将木棒从大到小排序 dfs(k, l), k是还剩多少木棒没用, ...

  3. var _ I = (*T)(nil)

    学习的时候看到这样一行代码 var _ Codec = (*GobCodec)(nil) 查了一下后,得到该语句的作用为:检查GobCodec这个结构体是否实现了Codec这个接口 空白标识符_代表变 ...

  4. NSSCTF Round#13 web专项

    rank:3 flask?jwt? 简单的注册个账号,在/changePassword 下查看页面源代码发现密钥<!-- secretkey: th3f1askisfunny --> ,很 ...

  5. 深度揭秘阿里云 Serverless Kubernetes

    作者 | 陈晓宇(阿里云技术专家) 策划 | 褚杏娟 伴随着云原生的发展,从早先的单机版 Docker 到 Kubernetes 的编排领域的一统江湖,再到云上托管 Kubernetes,技术风雨变化 ...

  6. java向一个压缩包里增加文件

    如果遇到,向现有的压缩包里增加文件的需求可以参照如下的方式: 思路:1.先将压缩包解压 2.删除旧的压缩包 3.将解压后的文件和希望添加的文件一起重新生成一个压缩包 4.将第一步中解压后的文件删除. ...

  7. java项目实战-spring-基本用法01-day24

    目录 1. spring 简单介绍 2. IOC/DI --控制反转--是啥 3. 实现 3. 如果 对象的 属性为引用数据类型 如何 实例化对象 4 如何用注解的方式 以少量的代码实现对象的创建于获 ...

  8. springboot升级到2.6.x和2.7.x 兼容hystrix

    一.pom.xml需要引入的依赖 二.项目开启熔断器开关 2.1 注解方式 2.2 xml方式 三.依赖类缺失问题 四.版本匹配安全检查问题 五.测试验证 六.结论 一.pom.xml需要引入的依赖 ...

  9. SpringBoot实现限流注解

    SpringBoot实现限流注解 在高并发系统中,保护系统的三种方式分别为:缓存,降级和限流. 限流的目的是通过对并发访问请求进行限速或者一个时间窗口内的的请求数量进行限速来保护系统,一旦达到限制速率 ...

  10. IL合集二

    引言 在第一篇关于IL的文章中,我们写了一些IL的相加,创建对象,循环以及实现TryCatch的一些功能,接下来,为大家带上后续关于IL的更新,其中包括,类型转换,以及条件判断,还有定义字段,定义属性 ...