ODE手册(3)数据类型和惯例

本文介绍了ODE库的基本数据类型、对象和ID、参数和惯例等内容。详细解释了单精度和双精度浮点数据类型的优缺点,列举了多种ODE对象类型及其功能,并讨论了C与C++接口的选择及调试模式的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.1 基本数据类型

  ODE库可以被编译为使用单精度或双精度浮点数据类型。使用单精度时,模拟在占用较小内存空间的同时会取得较快的速度,但是会引起更多的数值型误差而且会引起可见的错误。另一方面,在使用单精度时会降低模拟的精确度和稳定性(必须说明哪些因素会影响到模拟的精确度和稳定性)。浮点型数据类型有dReal和其它一些常用的类型dVector3、dMatrix3、dQuaternion。矢量类浮点型数据类型都是通过简单的dReals数组实现的。它们的设计惯例如下:

名称 实现 格式
dQuaternion dReal[4] [w,x,y,z]w表示实数部分,(x,y,z)表示向量部分
dVectors4 dReal[4] [x,y,z,1.0]
dVectors3 dReal[4] 和dVectors4一样;第四个元数只是为了更好地对齐,应该忽略
dMatrix4 dReal[4*4] 一个4X4的矩阵,元素被设计为行优先序列,通常被当作一个奇次变换矩阵。也就是说位于左上3X3的元数是一个旋转矩阵,最后一列的第一个三元组是一个平移向量,最后一行就简化为[0,0,0,1]
dMatrix3 dReal[3*3] yige 3X3的矩阵,元素被设计为行优先序列。最后一列被忽略,并且同dVector3一样,仅仅用于更好地对齐

 3.2对象和ID

  在ODE中可以创建很多种对象:

  • dWorld:表示一个动力学世界,包含所有的仿真数据
  • dBody:表示一个刚体,没有任何形状:需要一个或更多的dGeom
  • dJoint:表示一个关节
  • dJointGroup:表示一个关节组,可以很容易地实现一次销毁所有的关节
  • dSpace:表示一个碰撞空间,用于组织和加速碰撞测试
  • dGeom:表示用于检测碰撞的形状
  在ODE中的各种函数处理这些对象并返回对象ID,常见的对象ID有dWorldID,dBodyID等等。
3.3 参数和惯例

  所有的3元向量(x,y,z)都通过“set”函数通过给定单独的x,y,z参数进行初始化;

  所有的3元向量都可以通过“get”函数获取一个指向dReal型数组的值;

  较大的向量通常都通过dReal型数组指针给定值或者返回结果;

  默认所有坐标都在全局坐标系中除非特别声明。

3.4 C v.s. C++

  ODE库是用C++写的,但是它的公共接口是由简单的C函数组成的,而不是类,这是为什么呢?

  • 使用C接口仅仅是为了更简单—C++的特点对ODE并不是很有帮助
  • 阻止C++识别和“运行时”,支持交叉编译
  • 使用ODE的用户并不一定需要熟悉C++模式
  有一个半官方的c++ 封装和ODE的库文件一起发布(在odecpp*.h文件中,但是有一些设计上的限制)
3.5 调试

  ODE的库文件可以被编译为“调试”或“发布”模式。调试模式虽然较慢,但是函数参数会被检测并且会做很多run-time测试以确保内部一致性;发布模式虽然较快但是不会做任何检查。

 
 排雷区:(用于对一些非本博文主题内的技术名词和其它关键词进行简要介绍)

  wrapper:(封装)在实际的程序开发过程中,我们通常会为不同的应用设计适应于不同编程语言、环境接入的接口,对于这种接口的处理,通常称之为wrapper。在此篇博文中出现的wrapper就是一种ODE针对C++提供的接口。

  run-time:(运行时)在程序开发的过程中,我们通常会将此过程分为多个阶段,也成为不同的时期(主要有compile time、link time、load time、run time等)。运行时表示程序运行、执行的时期。通常所说的run-time测试、错误主要针对的就是程序在运行阶段的各种测试和出现的各种错误。

动力学引擎ODE 0.13最新版本 The Open Dynamics Engine (ODE), Copyright (C) 2001-2007 Russell L. Smith. ------------------------------------------------------------------------- ODE is a free, industrial quality library for simulating articulated rigid body dynamics - for example ground vehicles, legged creatures, and moving objects in VR environments. It is fast, flexible, robust and platform independent, with advanced joints, contact with friction, and built-in collision detection. This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file LICENSE.TXT. (2) The BSD-style license that is included with this library in the file LICENSE-BSD.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files LICENSE.TXT and LICENSE-BSD.TXT for more details. * Installation instructions are in the INSTALL.txt file * The ODE web pages are at http://ode.org/ * An online manual is at http://opende.sf.net/wiki/index.php/Manual * API documentation is in the file ode/docs/index.html, or you can view it on the web at http://opende.sf.net/docs/index.html All contributions are copyright by their owners, but the owners automatically transfer unrestricted rights in those changes to the ODE project, which is released under the dual licenses as indicated. The owners can also use the contributions in other projects under other licenses if they want (including sell them), but they can't prevent anyone from releasing the contributions under the dual ODE licenses as part of an ODE release.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值