资源描述:
《层级结构和建模方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、层级结构和建模方法模型模型是世界的抽象这里的世界既可以是真实的,也可以是虚拟的模型通常是用它的数学方程表示的在计算机科学中应用抽象数据类型模拟对象的组织在计算机图形学中应用几何对象模拟整个世界模型的数学表示当建立一个数学模型时,需要仔细确定采用哪种数学表示根据所需要模拟的现象进行选择例:常微分方程适用于模拟弹簧质子系统的行为;而偏微分方程则适用于模拟流体的行为在计算机图形学中关键在于几何对象的表示方式以及对象之间关系的反映分级建模基本内容线性建模的局限性符号与实例分级模型关联的模型机器人介绍树模型与DAG
2、模型实例变换从一个原型对象(称为一个符号,symbol)开始在模型中对象的出现称为一个实例(instance)需要进行放缩、定向、定位定义实例的变换符号-实例表存贮模型的方法是:给每个符号赋一个编号,并存贮实例变换的参数汽车模型的关系符号-实例表并没有显示出来模型各部分之间的关系考虑汽车的模型车身+四个一样的车轮两个符号向前运动的速度由车轮的旋转速度确定的由函数调用反映结构car(speed){chassis();wheel(right_front);wheel(left_front);wheel(rig
3、ht_rear);wheel(left_rear);}没有很好地反映各部分之间的关系图结构图(graph)由节点(node)和边(edge,也称为link)组成边连接两个节点有向图无向图环路(cycle):构造一个循环的有向路径树结构一种特殊的图结构,其中每个节点(除了根节点)都有一个父节点可以有多个子节点叶子:没有子节点的节点汽节的树结构模型DAG结构模型如果应用所有轮子相同的事实,那么就得到有向无环图(directedacyclicgraph,DAG)与树结构的处理没有很大的不同应用树结构建模需要确定
4、把哪种信息放在节点上,哪种信息放在边上节点要绘制的内容指向子节点的指针边可以包含变换矩阵改变的信息(也可以保存在节点处)机器人手臂关联的模型机器人手臂就是一个关联的模型(articulatedmodel)的例子部分与部分之间在关节处连接在一起可以通过给定关节角指定模型的状态机器人手臂中的关系支架部分独立旋转单个角度确定它的位置下臂与基本部分相连它的位置与支架的旋转相关必须相对于支架平移,并且绕关节点旋转上臂与下臂相连它的位置与支架和下臂的位置有关相对于下臂部分平移,并且绕与下臂相连的关节处旋转所需要的矩阵
5、支架的旋转:Rb把M=Rb应用到支架上下臂相对于支架部分部分平移:Tlu下臂绕关节旋转:Rlu把M=RbTluRlu应用到下臂上上臂相对于下臂平移:Tuu上臂绕关节旋转:Ruu把M=RbTluRluTuuRuu应用到上臂上机器人手臂的OpenGL代码robot_arm(){glRotated(theta,0.0,1.0,0.0);base();glTranslated(0.0,h1,0.0);glRotated(phi,0.0,1.0,0.0);lower_arm();glTranslated(0.0,h
6、2,0.0);glRoated(psi,0.0,1.0,0.0);upper_arm();}机器人手臂的树结构模型注意上述代码显示了模型中各部分的关系这样可以很容易改变各部分的样子,而不改变它们相互之间的关系右图为机器人手臂的树结构模型希望为节点建立起一个一般的节点结构可能的节点结构推广需要处理多个子节点的情形如何表示一个更一般的树结构?如何遍历这样的数据结构?动画如何动态应用?能否在执行期间创建和删除节点?人体示意图模型的建立可以用二次曲面简单实现前述示意图椭球面与圆柱面通过函数调用创建每一部分tors
7、o();left_upper_arm();矩阵描述节点相对于其父节点的位置Mlll相对于左上腿定位左下腿带有矩阵的树结构显示与遍历示意图的位置是由11个关节角(头部有两个,其它每部分一个)确定的树结构的显示需要对图进行遍历访问每个节点一次在每个节点处的绘制函数描述与节点相联系的部分,并且应用恰当的变换矩阵进行定位和定向变换矩阵有10个相关的矩阵M定位和定向整个示意图,它作用在根节点躯干上Mh相对于躯干定位头部Mlua,Mrua,Mlul,Mrul相对于躯干定位手臂与腿Mlla,Mrla,Mlll,Mrll
8、相对于四肢的上半部分定位各自的下半部分基于堆栈的遍历把模型视图矩阵设为M,并绘制躯干设置模型视图矩阵为MMh,并绘制头部对于左上臂,应用矩阵MMlua,其它部分类似在实际应用时,没有必要自己重新计算MMlua或者应用逆矩阵,可以应用矩阵堆栈存贮矩阵M以及其它在遍历树结构时遇到的矩阵遍历代码分析上述代码描述了特定的树结构,并采用了特定的遍历策略能否设计出更一般的方法呢?注意在示例代码中没有对状态进行修改,例如没有改变颜色也可以采