基于.NET的机械运动模拟应用开发
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的机械运动模拟应用开发的更多相关文章
- 基于C#和Asp.NET MVC开发GPS部标监控平台
基于交通部796标准开发部标监控平台,选择开发语言和技术也是团队要思考的因素,其实这由团队自己擅长的技术来决定,如果擅长C#和Asp.NET, 当然开发效率就高很多.当然了技术选型一定要选用当前主流的 ...
- qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统
qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和linux kernel,达到与开发板上一样的学习效果! 虽然已经买了2440开发板,但是在实际学习 ...
- qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统【转】
转自:http://www.cnblogs.com/riskyer/p/3366001.html qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和l ...
- 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】
转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...
- 基于C#和Asp.NET MVC开发GPS部标视频监控平台
基于C#和Asp.NET MVC开发GPS部标监控平台 目前整理了基于.NET技术的部标平台开发文章,可以参考: 1.部标Jt808协议模拟终端的设计和开发 2.C#版的808GPS服务器开发-> ...
- 转: 基于netty+ protobuf +spring + hibernate + jgroups开发的游戏服务端
from: http://ybak.iteye.com/blog/1853335 基于netty+ protobuf +spring + hibernate + jgroups开发的游戏服务端 游戏服 ...
- cWeb开发框架,基于asp.net的cWeb应用开发平台介绍(二)
cWeb是基于微软的.Net Framework 4框架,数据库是sql server 2008 r2. cWeb开发框架下载,点击这里去下载. cWeb开发框架借鉴三层架构理论分为三层,分别是:cD ...
- cWeb开发框架,基于asp.net的cWeb应用开发平台介绍(一)
cWeb开发框架是基于asp.net的B/S应用开发平台,采用三层架构理论,应用简单.代码简洁.运行快速. cWeb是bubufx提供,是分享资源,无任何版权限制,bubufx继续传承互联网精神,可随 ...
- 基于Netty的私有协议栈的开发
基于Netty的私有协议栈的开发 书是人类进步的阶梯,每读一本书都使自己得以提升,以前看书都是看了就看了,当时感觉受益匪浅,时间一长就又还回到书本了!所以说,好记性不如烂笔头,以后每次看完一本书都写一 ...
- 基于微软平台IIS/ASP.NET开发的大型网站有哪些呢?
首先说明一下,本文绝不是要说Microsoft平台多么好,多么牛.只是要提醒一些LAMP/JAVA平台下的同志们,微软平台不至于像你们说的,和想象的那么不堪!只是你们自己不知道而已.同时,也希望广大M ...
随机推荐
- C++ lambda 内 std::move 失效问题的思考
最近在学习 C++ Move 时,有看到这样一个代码需求:在 lambda 中,将一个捕获参数 move 给另外一个变量. 看似一个很简单常规的操作,然而这个 move 动作却没有生效. 具体代码如下 ...
- Java | Spring Boot数据源配置原理
在数据库访问过程中,"数据源"无疑是最重要的概念之一,它不仅可以对与数据库访问相关的各种参数进行封装和统一管理,还可以管理数据库连接池,提高数据库连接性能. 目前,在市面上有很多优 ...
- vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
上传文档格式 1 <template> 2 <div> 3 <div class="upload"> 4 <div> 5 <d ...
- freeswitch的mod_xml_curl模块动态获取dialplan
概述 freeswitch是一款简单好用的VOIP开源软交换平台. mod_xml_curl模块支持从web服务获取xml配置,本文介绍如何动态获取dialplan配置. 环境 centos:Cent ...
- 小白学标准库之 log
日常开发中,日志 log 几乎是必不可少.本文旨在介绍 log 的使用和内部实现等. 1. log 使用及实现 package main import ( "fmt" " ...
- zookeeper源码(06)ZooKeeperServer及子类
ZooKeeperServer 实现了单机版zookeeper服务端功能,子类实现了更加丰富的分布式集群功能: ZooKeeperServer |-- QuorumZooKeeperServer |- ...
- SpringMVC04——数据处理及跳转
结果跳转 1.ModelAndView 设置ModelAndView对象,根据view的名称,和试图解析器跳到指定的页面. 页面:{视图解析器前缀} + viewName + {视图解析器后缀} &l ...
- Go-获取密码的sha值
// 对用户密码进行加密 func EncodePwd(pwd string) string { s := sha256.New() s.Write([]byte(pwd)) data := s.Su ...
- [转帖]010 Linux 文本统计与去重 (wc 和 uniq)
https://my.oschina.net/u/3113381/blog/5427461 wc 命令一般是作为组合命令的一员与其他命令一同起到统计的作用.而一般情况下使用 wc -l 命令较多. u ...
- Docker 23.0.0 简单学习与使用
前言 Docker 从2013年火起来到现在才第十个年头. 现在已经被Google的K8S打的没有任何还手之力. 随着K8S放弃支持docker,仅支持containerd的方式. 直接导致docke ...