Vortex动力学建模-魏春雨.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Vortex建模实例分析ExHinge实例分析这个实例的目的是:建立两个物体,他们之间只有一个相对旋转的自由度。想要达到的效果如下图所示。绿色物体可以绕着黑色轴旋转。红色物体固定。显然,这里的“Hinge”并不是我们通常所说的“铰链”,而是对两个物体相对只有一个转动自由度的统称。上图中,通过控制上下、左右键可以控制绿色运动物体的运动方向、加减速等。下面分析一下VORTEX中是如何编程实现这一建模仿真过程的。一、Vortex是基于C++的,所以头文件包括哪些内容是首先要考虑的内容,例子中要用的基本几何体、part、hinge、运动控制等,因此必须要包含头文件:“#include Vx/VxFrame.h //系统必须存在frame#include Vx/VxBox.h //基本几何体#include Vx/VxCollisionGeometry.h //碰撞检测用#include Vx/VxPart.h //创建零部件时需要#include Vx/VxHinge.h //创建铰链时需要#include Vx/VxUniverse.h //系统必须至少存在一个Universe#include Vx/VxConstraintController.h //控制运动时需要#include Vx/VxVisualizer.h” //用于观察#include stdio.h //C++标准库文件除了这些必须包含的文件之外,例程中还包含头文件“#include Vx/VxPrecision.h”,不知道其具体作用,将其注释掉后运行程序,没有变化。二、从程序整体上看分为三部分,依次分别为:定义ExHinge类、运动控制、主程序。下面分别进行分析。1.ExHinge类中包含了对其成员函数及数据成员的声明。其成员函数包括构造函数(ExHinge(VxUniverse* in_Universe);)、析构函数(~ExHinge())、创建零件函数(void createParts(VxVisualizer* in_visualizer);)、创建约束函数(void createConstraints(););其数据成员分别为VxUniverse、VxPart(2个)、VxHinge。在该类的外部分别对这些成员函数进行了定义。在类的内部对成员函数做声明,而在类体外定义成员函数,这是程序设计的一个良好习惯。创建零部件的成员函数如下图所示:上图中右侧四个大括号是创建零件的四个必要步骤。第一个大括号是创建了一个固定不动的物体,大小为4x1x1,默认为其几何中心在坐标原点。如果要想改变其位置的话可以用setposition()函数改变。创建过程中需要先用addGeometry()函数创建物理模型,然后将零件添加到Universe中去。这里要补充一点的是,Vortex中的物体有物理模型和场景模型两种,前者是用于物理学计算的,后者是显示用的。两者可以重合,也可以不重合。场景模型可以在Vortex中创建,也可以由Creator、3dmax等创建好后加载。第二个大括号是创建静止物体的场景模型。由于场景模型是用于观察的,而且是直接在Vortex中创建的,因此先必须设定颜色。然后创建了场景模型并将其结点与物理模型连接了起来。这部分的最后一条语句是设置了该物体的驱动方式,是动力学驱动还是结点驱动,这里选择的是结点驱动。注意:由于该物理没有设定质量,因此必须指定驱动方式。如果设定了质量,则无需指定驱动方式,强制为动力学驱动。第三、四个大括号创建了运动物体的物理模型、场景模型,过程与固定物体的创建基本相同。这里说一下不同的地方。运动物体不可能再摆放到坐标系原点位置,因此要用setposition()重置。运动物体已经设定了质量,因此驱动方式不需要指定。再看创建约束的成员函数。首先用语句“VxVector3 axis(1, 0, 0); VxReal3 pos; mMovingPart-getPosition(pos);”指定了铰链的位置和旋转的方向。下面的语句用处很大:用于改变物体方位的,第一句、第四句分别为定义和调用变换矩阵,二、三句分别为旋转和平移。本例中不再需要进行变换,因此旋转参数为0,平移位置设置和初始值相同。如果将这段程序注释掉后运行,发现不影响结果,就是这个原因。然后用语句mHinge = new VxHinge(mFixedPart, mMovingPart, pos, axis.v)创建了铰链约束。并指定了铰链的两个物体碰撞交互失效。这个是必需的。最后将铰链约束添加到Universe中。2.对铰链约束的运动控制。这部分比较难理解,只是大概了解了它的主要作用。但是这部分相当重要,经过仔细探索,也有了一些理解和感悟:控制必须有一些逻辑在里面,不是任何情况下都

文档评论(0)

chqs52 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档