<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_任程的博客</title><subtitle type="text">计算机图形、动画、虚拟现实 /3D Computer Graphics, Computer Animation, Virtual Reality</subtitle><id>http://feed.cnblogs.com/blog/u/30155/rss</id><updated>2011-10-17T16:24:35Z</updated><author><name>任程</name><uri>http://www.cnblogs.com/ArenAK/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ArenAK/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/30155/rss"/><entry><id>http://www.cnblogs.com/ArenAK/archive/2011/08/16/2140414.html</id><title type="text">运动捕捉数据的行为分割</title><summary type="text">给定一个时间很长的包含多种行为的运动捕捉数据，自动地对其进行分割，使得分割后的每段只包含一种行为，本文提供源代码。</summary><published>2011-08-16T04:01:00Z</published><updated>2011-08-16T04:01:00Z</updated><author><name>任程</name><uri>http://www.cnblogs.com/ArenAK/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ArenAK/archive/2011/08/16/2140414.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ArenAK/archive/2011/08/16/2140414.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span size="6" style="font-size: x-large;"&gt;定义&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们有时会获得一些时间很长的运动捕捉数据文件，每个文件中包含多个行为动作（如图所示），比如走路、拳击、跑步、跳跃等等，而在进行运动编辑与运动合成时，常常希望一个片段只包含一种行为，例如你做运动片段插值的时候，可能只想要多个走路的运动片段，你不会想要把走路和一个特技动作进行直接的插值。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/201108/201108161138462716.png"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/ArenAK/201108/201108161138479519.png" width="244" height="163" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;当运动数据文件很多时，自动地对这些文件进行行为的分割就是很有用的了，分割后每个片段只包含一种类型的行为，也就是说给定一个运动数据文件m1,我们需要将m分割为m1,m2,&amp;hellip;mS,分割的段数S与各个分割点是待求解的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span size="6" style="font-size: x-large;"&gt;方法&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;文章&amp;rdquo;Segmenting Motion Capture Data into Distinct Behaviors, &lt;a href="http://www-2.cs.cmu.edu/~barbic/"&gt;J. Barbic&lt;/a&gt; and &lt;a href="http://www-2.cs.cmu.edu/~alla/"&gt;A. Safonova&lt;/a&gt; and&amp;nbsp; &lt;a href="http://www-2.cs.cmu.edu/~jypan/"&gt;J.Y. Pan&lt;/a&gt; and&amp;nbsp; &lt;a href="http://www-2.cs.cmu.edu/~christos/"&gt;C. Faloutsos&lt;/a&gt; and &lt;a href="http://www-2.cs.cmu.edu/~jkh"&gt;J. K. Hodgins&lt;/a&gt; and &lt;a href="http://www-2.cs.cmu.edu/~nsp/"&gt;N. S. Pollard&lt;/a&gt;&amp;rdquo;（以下简称该文章为&amp;rdquo;Segment一文&amp;rdquo;）旨在处理此问题，你可以在这里：&lt;a href="http://graphics.cs.cmu.edu/projects/segmentation/"&gt;http://graphics.cs.cmu.edu/projects/segmentation/&lt;/a&gt;看到与该文章的视频信息，并下载到该文中使用的运动数据文件。我这里要提供的是对其文中想法的一个简述，并提供源代码。&lt;/p&gt;&#xD;
&lt;p&gt;Segment一文中介绍了三种分割的方法，分别是PCA方法(Principle Component Analysis)、PPCA(Probabilistic Principle Component Analysis)方法、GMM(Gaussian Mixture Model)方法。&lt;/p&gt;&#xD;
&lt;p&gt;其中前两种方法都基于PCA主元分析，其基本思想是这样的：人体各关节的运动由很大的相关性（如步行动作中左臂向前摆动时右臂会向后摆动），因此利用PCA可以对人体动作进行降维从而提取出主要成分来；而两个不同的行为会具有不同的主元成分，那么利用此特点就可以将行为区分开来。首先对一个区间段内的运动数据进行PCA提取，然后不断的加长此区间的长度，如果在加长到某个数据帧时发现提取出的PCA成分与前面区间段的PCA成分差异较大，那么就断定运动在此处发生了行为切换。&lt;/p&gt;&#xD;
&lt;p&gt;第三种方法基于混合高斯模型，其想法与以上也有相通之处，用高斯混合模型对整个运动序列进行建模，不同的行为会有不同的高斯分布，每个行为会聚集在自己的高斯簇周围，如果一个数据帧之前的运动片段聚集于一个簇，而其之后的运动片段聚集于另一个簇，那么就在此数据帧处对运动进行分割。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span size="6" style="font-size: x-large;"&gt;代码&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Segment一文的实验结果表明，PPCA方法得到的结果最优（具体实验请看原文），因此实现了PPCA方法，这里是代码下载：&lt;a title="http://files.cnblogs.com/ArenAK/BehaviorSegmentation.zip" href="http://files.cnblogs.com/ArenAK/BehaviorSegmentation.zip"&gt;http://files.cnblogs.com/ArenAK/BehaviorSegmentation.zip&lt;/a&gt;，当然你可以基于此代码做一些调整，就能得到PCA方法，因为PCA方法较PPCA方法更简单。&lt;/p&gt;&#xD;
&lt;p&gt;代码不当与需改进之处，欢迎指正。&lt;/p&gt;&#xD;
&lt;p&gt;代码使用方法：&lt;/p&gt;&#xD;
&lt;p&gt;直接运行main.m就可以了！&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;默认输入&lt;/b&gt;：&lt;/p&gt;&#xD;
&lt;p&gt;运动数据文件Patient1.Mix 01.amc.txt&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;默认输出&lt;/b&gt;：&lt;/p&gt;&#xD;
&lt;p&gt;程序运行完后，在matlab的命令行窗口显示类似这样的内容：&lt;br /&gt;allcuts =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1020&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1819&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2588&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3157&lt;br /&gt;4066&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4666&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6035&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7234&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8883&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9192&lt;br /&gt;9609&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10208&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10617&lt;br /&gt;这就是分割点，每个数字代表在哪一帧进行分割。&lt;br /&gt;另外程序会输出一些文件在result文件夹下，分为两类：&lt;br /&gt;1. 原txt文件被转化为amc文件并输出，如Patient1.Mix 01.amc.txt被转换为如Patient1.Mix01.amc.txt.amc，你可以用能打开amc程序的三维软件查看动作。&lt;br /&gt;2. 各个被分段后的amc文件，文件名以seg_开头，如seg_1.amc，seg_2.amc等，同样你可以查看分段得到的动作。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;说明&lt;/b&gt;：&lt;/p&gt;&#xD;
&lt;p&gt;代码包中包括了一个运动数据文件Patient1.Mix01.amc.txt作为输入，如果你想测试其它文件，请在网页&lt;a href="http://graphics.cs.cmu.edu/projects/segmentation/"&gt;http://graphics.cs.cmu.edu/projects/segmentation/&lt;/a&gt; 中提供的链接下载，代码的输入可以是与此文件格式相同的txt文件，也可以是CMU数据库的标准amc文件（你可以在&lt;a href="http://mocap.cs.cmu.edu/tools.php"&gt;http://mocap.cs.cmu.edu/tools.php&lt;/a&gt;下载到查看amc文件的三维软件）。&lt;/p&gt;&#xD;
&lt;p&gt;输入的文件可以是一个或多个，将其放在ExperimentCMUData文件夹下即可。&lt;br /&gt;另外，程序中有个参数threshold，默认值设为了500000，根据不同的文件，有可能你想要调节一下这个数：threshold越大，分段数越少；threshold越小，分段数越多。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/ArenAK/aggbug/2140414.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ArenAK/archive/2011/08/16/2140414.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ArenAK/archive/2011/01/05/1926733.html</id><title type="text">主元分析（PCA）在计算机图形学中的应用</title><summary type="text">本文首先简要介绍主元分析，然后侧重于举例说明主元分析在计算机图形学中的应用，最后给出主元分析的计算步骤与其作用于三维数据的相应代码。</summary><published>2011-01-05T12:04:00Z</published><updated>2011-01-05T12:04:00Z</updated><author><name>任程</name><uri>http://www.cnblogs.com/ArenAK/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ArenAK/archive/2011/01/05/1926733.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ArenAK/archive/2011/01/05/1926733.html"/><content type="html">&lt;p&gt;本文首先简要介绍主元分析，然后侧重于举例说明主元分析在计算机图形学中的应用，最后给出主元分析的计算步骤与其作用于三维数据的相应代码。  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;一. 简介&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;主元分析，即Principal Component Analysis，简称PCA，是一种对数据进行分析的技术。如其名字所述，它的作用是分析数据分布的主要元素/结构。主元分析会由主到次找到数据的分布方向，通过舍去那些次要的分布方向，它可以用于去除噪声、数据降维等。其计算简单，在多个领域有着广泛的应用。  &lt;/p&gt;&lt;p&gt;以二维平面数据可以形象地说明主元分析。如图 1所示，给定XA、YA坐标系下的一些2维数据点（图中圆圈），我们希望找到方向轴Xp、Yp，其中Xp代表了数据的主要分布方向（主元轴），当Yp方向的变化很小时，我们可以认为Yp方向的变化为噪声所产生，因此可以去掉Yp这一维。  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052003576725.gif"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="clip_image001[5]" border="0" alt="clip_image001[5]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052003595514.gif" width="232" height="244" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p align="center"&gt;图 1 主元分析示意图  &lt;/p&gt;&lt;p&gt;设图1中原来的有一个数据P为（3.05, 2.95），即  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052003598479.gif"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="CodeCogsEqn (10)" border="0" alt="CodeCogsEqn (10)" src="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004001445.gif" width="360" height="42" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;主元分析获得主元轴Xp、Yp后，P可以表示为  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004014410.gif"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="CodeCogsEqn (11)" border="0" alt="CodeCogsEqn (11)" src="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004025740.gif" width="570" height="46" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 此时P仍为2维数据，但是因为Xp轴的存在，只用一个坐标4.184表示就可以了。  &lt;/p&gt;&lt;p&gt;教程&amp;#8220;A tutorial on Principal Components Analysis, Lindsay I Smith&amp;#8221;给出了十分浅显易懂的主元分析推理，你可以在本文附件中获得此教程，同时本文附件中的代码实现了该教程的方法（教程中的代码仅限于对三维数据的分析）。  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;二. 主元分析在图形学中的应用&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;在此举出本人在计算机图形学领域利用PCA的几个地方:  &lt;/p&gt;&lt;ol&gt; &lt;li&gt;通过降维找出一堆顶点数据的分布特征（或者说模式pattern）：分析网格数据（如对人物的网格进行分析从而发现其骨架拓扑）时，有时会得到一堆散乱分布在关节附近的顶点数据，利用主元分析对这些散乱的顶点进行降维，如从3维降到2维，则可以发现这些顶点数据的分布特征。&lt;br /&gt;如图 2所示，图 2a在3ds Max中以Top、Front、Left、Perspective视角显示了原数据，图 2b中的蓝色线条表示主元分析得到的前两个主元轴，去掉最不重要的一个轴后，点数据表示在两个主元轴下，可看出此时数据更好的呈现出了圆环分布的特征。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;求给定三角形网格的有向包围盒（OBB）。OBB是一种对模型进行视锥裁剪与碰撞检测的有效方式，然而通常网格模型表示在一个与世界坐标系平行的框架中，可以利用主元分析求得模型所在的各个自然轴，如一个斜放着的圆柱其第一个自然轴是有圆柱底面中心指向圆柱顶面中心的方向。求得各个自然轴后，通过各顶点坐标与单位自然轴的点积，即可获得各顶点在自然轴上的分布范围，进而得到OBB。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;对人物动画进行特征提取。例如数据捕捉采集到的人体步行动画通常由不同时刻各个关节（约40~60个）的角度来表示，当数据量很大时，对数据的存储与处理都是一件耗费资源的事情。而普通的步行动作中，当一个人左臂向前摆动时右臂总向后摆动，这就是说这些数据有耦合，从而可以利用主元分析进行特征提取与压缩。由此也可以想象得到主元分析另一个强大的地方：对于一些高维度的数据，很难用三维图形的方式去展现，因此很难观察出其分布特征，而主元分析计算则可以发现这些特征。&lt;/li&gt;&lt;/ol&gt; &lt;p align="center"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004033099.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[4]" border="0" alt="clip_image002[4]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004054264.jpg" width="436" height="310" /&gt;&lt;/a&gt;&lt;br /&gt;a 原始数据&lt;br /&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004072147.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004[4]" border="0" alt="clip_image004[4]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004095504.jpg" width="444" height="319" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="center"&gt;b 主元分析后的数据  &lt;/p&gt;&lt;p align="center"&gt;&lt;a name="_Ref282020773"&gt;图 &lt;/a&gt;2 三维点数据降维&lt;/p&gt; &lt;p&gt;&lt;strong&gt;三. 主元分析计算步骤与代码&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;那么如何进行主元分析呢，教程&amp;#8220;A tutorial on Principal Components Analysis》，Lindsay I Smith&amp;#8221;已经给出了近乎于完美的讲解，在此，本人列出其计算步骤（以m维数据为例）：  &lt;/p&gt;&lt;ol&gt; &lt;li&gt;获取数据&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004118686.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CodeCogsEqn (1)" border="0" alt="CodeCogsEqn (1)" src="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004122175.gif" width="91" height="16" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;（每一个数据为一个m维列向量）&lt;/li&gt;&lt;li&gt;求出数据平均值&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004122665.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CodeCogsEqn (2)" border="0" alt="CodeCogsEqn (2)" src="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004133156.gif" width="112" height="21" /&gt;&lt;/a&gt; ，并用原数据减去均值得到&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004148912.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CodeCogsEqn (3)" border="0" alt="CodeCogsEqn (3)" src="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004154320.gif" width="94" height="20" /&gt;&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;计算协方差矩阵&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004164810.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CodeCogsEqn (4)" border="0" alt="CodeCogsEqn (4)" src="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004165301.gif" width="173" height="21" /&gt;&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;计算协方差矩阵的特征值&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004172203.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CodeCogsEqn (5)" border="0" alt="CodeCogsEqn (5)" src="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004172693.gif" width="98" height="16" /&gt;&lt;/a&gt; 与特征向量&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004187959.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CodeCogsEqn (6)" border="0" alt="CodeCogsEqn (6)" src="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/2011010520041886.gif" width="131" height="16" /&gt;&lt;/a&gt; （特征值与特征向量成对出现）。  &lt;/li&gt;&lt;li&gt;由大到小依次排列特征值得&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004199954.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CodeCogsEqn (7)" border="0" alt="CodeCogsEqn (7)" src="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004205220.gif" width="107" height="19" /&gt;&lt;/a&gt; ，对应特征向量为&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004207347.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CodeCogsEqn (8)" border="0" alt="CodeCogsEqn (8)" src="http://images.cnblogs.com/cnblogs_com/ArenAK/201101/201101052004212613.gif" width="140" height="19" /&gt;&lt;/a&gt; 。特征向量代表了原数据的分布方向，其对应的特征值越大，则该向量越重要（即为主元）；其对应的特征值越小，则该向量越次要。&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;此时即可根据特征值的大小来决定取舍了。如一个特征值为10，而另一个特征值为0.1，在说明这两个分布差了100倍，通常我们会舍弃特征值为0.1的方向的那个维度，因此就可以对数据进行降维表示了。例如我们取了前k个特征值，则就可以将数据表示在以前K个特征向量为基轴的坐标系下了。  &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;你可以在&lt;a href="http://www.cnblogs.com/ArenAK/archive/2010/12/19/1910404.html#PCAcode"&gt;这里&lt;/a&gt;下载本文C++代码。  &lt;/p&gt;&lt;p&gt;代码以SampleData.txt中的三维数据点作为输入，程序的输出存放在Results目录，  &lt;/p&gt;&lt;p&gt;输出的目录中包括3个文件：  &lt;/p&gt;&lt;ol&gt; &lt;li&gt;PCAResult.txt 存放经主元分析后在主元轴坐标系下的数据坐标。  &lt;/li&gt;&lt;li&gt;DisplaySamples.ms 为3ds Max脚本文件，用3ds Max打开后可看到SampleData.txt表示的数据点。  &lt;/li&gt;&lt;li&gt;DisplayResult.ms 为3ds Max脚本文件，用3ds Max打开后可看到将原3维数据在主元轴坐标系下降到2维后的数据点；同时该文件还显示了主元分析得到的前两个主元轴。&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; 更加通用的pca代码（Matlab代码）在&lt;a href="http://files.cnblogs.com/ArenAK/matlabpca.zip"&gt;这里&lt;/a&gt;下载。&lt;/div&gt;&lt;img src="http://www.cnblogs.com/ArenAK/aggbug/1926733.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ArenAK/archive/2011/01/05/1926733.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ArenAK/archive/2010/12/19/1910404.html</id><title type="text">本博客代码公布（本文会不断更新）</title><summary type="text">1.海水渲染代码； 2.人体运动捕捉数据的行为分割； 3.主元分析代码； 4.Ogre+Ribbon代码； 5.Ogre SceneNode+可移动二维字代码; 6. 组播（多播）代码；</summary><published>2010-12-19T03:05:00Z</published><updated>2010-12-19T03:05:00Z</updated><author><name>任程</name><uri>http://www.cnblogs.com/ArenAK/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ArenAK/archive/2010/12/19/1910404.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ArenAK/archive/2010/12/19/1910404.html"/><content type="html">&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1.&amp;nbsp;&lt;a name="OceanCode" id="OceanCode"&gt;&lt;/a&gt;海水代码下载：&amp;nbsp;&lt;a href="http://files.cnblogs.com/ArenAK/OceanPG.zip"&gt;http://files.cnblogs.com/ArenAK/OceanPG.zip&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;其相应文章见:&amp;nbsp;&lt;a href="http://www.cnblogs.com/ArenAK/archive/2007/11/07/951713.html"&gt;http://www.cnblogs.com/ArenAK/archive/2007/11/07/951713.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;另外一篇相关文章见&amp;nbsp;&lt;a href="http://www.cnblogs.com/ArenAK/archive/2008/03/19/1113493.html"&gt;http://www.cnblogs.com/ArenAK/archive/2008/03/19/1113493.html&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;Ogre Add-ons中的Hydrax已经融合了本代码，如果你需要一个基于Ogre的内容更加丰富（如包含Caustics等）的水面仿真，请到Hydarx页面下载Hydrax；而如果你更需要一个纯粹一些的Projected Grid的实现，那么本代码或许将是你更好的选择。&lt;/p&gt;&#xD;
&lt;p&gt;ps : 此海水代码写于2007年，在VS2005+Ogre1.4.x环境下编写。据一位2010年11月份使用此代码的读者好友说，此代码在Ogre1.7.x环境下仍可编译运行。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2. 对人体运动捕捉数据进行按行为分段的代码 下载：&lt;a href="http://files.cnblogs.com/ArenAK/BehaviorSegmentation.zip"&gt;http://files.cnblogs.com/ArenAK/BehaviorSegmentation.zip&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;相应文章见：&lt;a href="http://www.cnblogs.com/ArenAK/archive/2011/08/16/2140414.html"&gt;http://www.cnblogs.com/ArenAK/archive/2011/08/16/2140414.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;3. &lt;a id="PCAcode" name="PCAcode"&gt;&lt;/a&gt;主元分析C++代码下载：&lt;span style="line-height: 18px; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px;" &gt;&lt;a style="color: #1d58d1; text-decoration: none;" title="http://files.cnblogs.com/ArenAK/PurePCA.zip" href="http://files.cnblogs.com/ArenAK/PurePCA.zip"&gt;http://files.cnblogs.com/ArenAK/PurePCA.zip&lt;/a&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;其相应文章见：&lt;a href="http://www.cnblogs.com/ArenAK/archive/2011/01/05/1926733.html"&gt;http://www.cnblogs.com/ArenAK/archive/2011/01/05/1926733.html&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;该代码以一堆3维数据点为输入，可分析数据点的特征分布、可将数据点降维至2维、1维。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;更加通用的（输入数据没有维数限制）的主元分析matlab代码下载：&lt;a href="http://files.cnblogs.com/ArenAK/matlabpca.zip"&gt;http://files.cnblogs.com/ArenAK/matlabpca.zip&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;4.&amp;nbsp;&lt;a name="OgreRibbonCode" id="OgreRibbonCode"&gt;&lt;/a&gt;在Ribbon界面（Office 2007风格）下，最基本的Ogre框架实现。代码下载：&amp;nbsp;&lt;a href="http://files.cnblogs.com/ArenAK/Ogre_OfficeRibbon.zip"&gt;http://files.cnblogs.com/ArenAK/Ogre_OfficeRibbon.zip&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;利用鼠标滑轮、邮件，以及键盘上、下、左、右键进行控制。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;注：此代码在debug调试运行时，vs2010窗口提示内存泄露，由于时间仓促未予以解决，关于Ogre在mfc中内存泄露的问题，请google或者百度相关文章。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;5.&amp;nbsp;&lt;a name="MovableText" id="MovableText"&gt;&lt;/a&gt;Ogre中在SceneNode节点旁显示二维字的代码 下载 ：&amp;nbsp;&lt;a href="http://files.cnblogs.com/ArenAK/MovableText.rar"&gt;http://files.cnblogs.com/ArenAK/MovableText.rar&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;相应文章见：&amp;nbsp;&lt;a href="http://www.cnblogs.com/ArenAK/archive/2008/03/09/1097913.html"&gt;http://www.cnblogs.com/ArenAK/archive/2008/03/09/1097913.html&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;或许你也应该看看那篇文章的评论部分，以得到如何在新版本中更新代码的相关信息。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;6. 组播（多播）代码 下载：&lt;a href="http://files.cnblogs.com/ArenAK/MultiCast.zip"&gt;http://files.cnblogs.com/ArenAK/MultiCast.zip&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;使用方法见代码.h中开头的一段说明。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/ArenAK/aggbug/1910404.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ArenAK/archive/2010/12/19/1910404.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ArenAK/archive/2010/07/25/1784782.html</id><title type="text">机器人逆动力学（Robot Inverse Dynamics）</title><summary type="text">本文讲解机器人逆动力学（Robot Inverse Dynamics)的牛顿欧拉迭代算法，及其计算性能。</summary><published>2010-07-25T11:04:00Z</published><updated>2010-07-25T11:04:00Z</updated><author><name>任程</name><uri>http://www.cnblogs.com/ArenAK/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ArenAK/archive/2010/07/25/1784782.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ArenAK/archive/2010/07/25/1784782.html"/><content type="html">&lt;p&gt;（作者建议您在&lt;a href="http://files.cnblogs.com/ArenAK/%E6%9C%BA%E5%99%A8%E4%BA%BA%E9%80%86%E5%8A%A8%E5%8A%9B%E5%AD%A6.pdf" target="_blank"&gt;这里&lt;/a&gt;下载本文pdf版获得更清晰的阅读方式）。&lt;/p&gt; &lt;p&gt;逆动力学问题是指：已知某一时刻机器人各关节的位置 &lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image002_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image002_thumb.gif" width="14" height="18" /&gt;&lt;/a&gt;，关节速度&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image004_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image004_thumb.gif" width="14" height="22" /&gt;&lt;/a&gt;及关节加速度&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image006_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image006_thumb.gif" width="14" height="22" /&gt;&lt;/a&gt;，求此时施加在机器人各杆件上的驱动力（力矩）&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image008_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image008_thumb.gif" width="14" height="14" /&gt;&lt;/a&gt;。 &lt;/p&gt; &lt;p&gt;逆动力学问题在机器人控制与计算机动画领域都有广泛的应用。例如当给出期望的机器人运动状态时，我们可以通过逆动力学解算来分析其力矩是否可以由作动系统实现。在计算机动画领域，可以利用优化算法求解力矩消耗最小的动画过程（如文献[1]）来得到一个自然的动画。另外，逆动力学也常作为正动力学的一个子部分来求解正动力学（正动力学指已知力和力矩，求系统状态）。  &lt;/p&gt;&lt;p&gt;逆动力学可以利用牛顿欧拉(Newton-Euler)方程来求解，也可以利用拉格朗日(Lagrange)方程来求解（二者的等价性与区别读者可以参看文献[2]中的2.3节）。本文旨在讲解如何基于牛顿欧拉(Newton-Euler)方程来求解机器人逆动力学，其算法被称为&amp;#8220;迭代牛顿欧拉算法(Recursive Newton-Euler Algorithm)&amp;#8221;。  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a name="_Ref267842275"&gt;1. 预备知识&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;在介绍&amp;#8220;迭代牛顿欧拉算法(Recursive Newton-Euler Algorithm)&amp;#8221;之前，让我们先看一下什么是牛顿欧拉方程：  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image010_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image010" border="0" alt="clip_image010" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image010_thumb.gif" width="192" height="56" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;其中&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image012_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image012" border="0" alt="clip_image012" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image012_thumb.gif" width="30" height="22" /&gt;&lt;/a&gt;表示线加速度，&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image014_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image014" border="0" alt="clip_image014" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image014_thumb.gif" width="34" height="22" /&gt;&lt;/a&gt;表示角加速度（角速度的导数），等式左边的求和符号表示公式中应该使用合力与合力矩。关于如何得出牛顿欧拉方程，请参看我的前一篇文章：《刚体动力学》&lt;a href="http://www.cnblogs.com/ArenAK/archive/2010/06/07/1753427.html"&gt;http://www.cnblogs.com/ArenAK/archive/2010/06/07/1753427.html&lt;/a&gt;。  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a name="_Ref267842275"&gt;2. 迭代牛顿欧拉算法&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;下面我们说明什么是&amp;#8220;迭代牛顿欧拉算法(Recursive Newton-Euler Algorithm)&amp;#8221;，即它如何从系统状态求解出力矩，之后在下一节本文将说明为什么要进行&amp;#8220;迭代&amp;#8221;计算，从而导出此算法的复杂度。  &lt;/p&gt;&lt;p&gt;迭代牛顿欧拉算法包含两个迭代过程：  &lt;/p&gt;&lt;p&gt;（1）第一个迭代过程由机器人运动系统的根节点开始，逐步向各个叶子节点进行迭代。在此迭代过程中各个杆件的运动速度（线速度&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image016_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image016" border="0" alt="clip_image016" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image016_thumb.gif" width="14" height="14" /&gt;&lt;/a&gt;、角速度&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image018_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image018" border="0" alt="clip_image018" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image018_thumb.gif" width="16" height="14" /&gt;&lt;/a&gt;）、运动加速度（线加速度&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image020_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image020" border="0" alt="clip_image020" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image020_thumb.gif" width="14" height="18" /&gt;&lt;/a&gt;、角加速度&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image022_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image022" border="0" alt="clip_image022" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image022_thumb.gif" width="16" height="18" /&gt;&lt;/a&gt;）被依次求出，从父节点向子节点迭代的直观原因是父节点会带动子节点运动，因此子节点的速度/加速度要在父节点的速度/加速度求出后迭代求出：  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image024_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image024" border="0" alt="clip_image024" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image024_thumb.gif" width="124" height="26" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image026_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image026" border="0" alt="clip_image026" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image026_thumb.gif" width="178" height="26" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image028_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image028" border="0" alt="clip_image028" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image028_thumb.gif" width="238" height="26" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image030_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image030" border="0" alt="clip_image030" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image030_thumb.gif" width="240" height="21" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;其中速度（线速度&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image032_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image032" border="0" alt="clip_image032" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image032_thumb.gif" width="18" height="24" /&gt;&lt;/a&gt;、角速度&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image034_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image034" border="0" alt="clip_image034" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image034_thumb.gif" width="20" height="24" /&gt;&lt;/a&gt;）和加速度（线加速度&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image036_3.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image036" border="0" alt="clip_image036" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image036_thumb.gif" width="18" height="24" /&gt;&lt;/a&gt;、角加速度&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image038_3.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image038" border="0" alt="clip_image038" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image038_thumb.gif" width="20" height="24" /&gt;&lt;/a&gt;）都表示在杆件&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040_13.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image040" border="0" alt="clip_image040" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040_thumb.gif" width="10" height="18" /&gt;&lt;/a&gt;的局部坐标系&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image042_8.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image042" border="0" alt="clip_image042" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image042_thumb.gif" width="18" height="24" /&gt;&lt;/a&gt;中；&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 线速度&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image036%5B1%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image036[1]" border="0" alt="clip_image036[1]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image036%5B1%5D_thumb.gif" width="18" height="24" /&gt;&lt;/a&gt;和线加速度&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image038%5B1%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image038[1]" border="0" alt="clip_image038[1]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image038%5B1%5D_thumb.gif" width="20" height="24" /&gt;&lt;/a&gt;为杆件&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B1%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image040[1]" border="0" alt="clip_image040[1]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B1%5D_thumb.gif" width="10" height="18" /&gt;&lt;/a&gt;局部坐标系原点的运动速度（表示在局部坐标系&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image042%5B1%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image042[1]" border="0" alt="clip_image042[1]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image042%5B1%5D_thumb.gif" width="18" height="24" /&gt;&lt;/a&gt;中）；&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image044_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image044" border="0" alt="clip_image044" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image044_thumb.gif" width="12" height="14" /&gt;&lt;/a&gt;为杆件&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B2%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image040[2]" border="0" alt="clip_image040[2]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B2%5D_thumb.gif" width="10" height="18" /&gt;&lt;/a&gt;的运动轴（平移轴或旋转轴）在坐标系&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image042%5B2%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image042[2]" border="0" alt="clip_image042[2]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image042%5B2%5D_thumb.gif" width="18" height="24" /&gt;&lt;/a&gt;中的方向；&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image046_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image046" border="0" alt="clip_image046" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image046_thumb.gif" width="16" height="24" /&gt;&lt;/a&gt;，&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image048_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image048" border="0" alt="clip_image048" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image048_thumb.gif" width="16" height="24" /&gt;&lt;/a&gt;为测量得到的杆件&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B3%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image040[3]" border="0" alt="clip_image040[3]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B3%5D_thumb.gif" width="10" height="18" /&gt;&lt;/a&gt;旋转的速度和加速度数值（是标量）；&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image050_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image050" border="0" alt="clip_image050" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image050_thumb.gif" width="32" height="26" /&gt;&lt;/a&gt;为由坐标系&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image052_3.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image052" border="0" alt="clip_image052" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image052_thumb.gif" width="26" height="24" /&gt;&lt;/a&gt;到坐标系&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image042%5B3%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image042[3]" border="0" alt="clip_image042[3]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image042%5B3%5D_thumb.gif" width="18" height="24" /&gt;&lt;/a&gt;的旋转矩阵；&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image054_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image054" border="0" alt="clip_image054" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image054_thumb.gif" width="26" height="26" /&gt;&lt;/a&gt;为坐标系&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image042%5B4%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image042[4]" border="0" alt="clip_image042[4]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image042%5B4%5D_thumb.gif" width="18" height="24" /&gt;&lt;/a&gt;的原点在坐标系&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image052%5B1%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image052[1]" border="0" alt="clip_image052[1]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image052%5B1%5D_thumb.gif" width="26" height="24" /&gt;&lt;/a&gt;中的位置。  &lt;/p&gt;&lt;p&gt;同时由于各个杆件所受的合力、合力矩只与加速度有关，因此在此迭代过程中各杆件所受的合力、合力矩也可以被求出：  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image056_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image056" border="0" alt="clip_image056" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image056_thumb.gif" width="218" height="24" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image058_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image058" border="0" alt="clip_image058" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image058_thumb.gif" width="150" height="26" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;其中&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image060_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image060" border="0" alt="clip_image060" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image060_thumb.gif" width="16" height="24" /&gt;&lt;/a&gt;、&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image062_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image062" border="0" alt="clip_image062" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image062_thumb.gif" width="20" height="24" /&gt;&lt;/a&gt;分别为杆件&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B4%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image040[4]" border="0" alt="clip_image040[4]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B4%5D_thumb.gif" width="10" height="18" /&gt;&lt;/a&gt;的质心所受到合力、合力矩。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image064_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image064" border="0" alt="clip_image064" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image064_thumb.gif" width="18" height="24" /&gt;&lt;/a&gt;为杆件&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B5%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image040[5]" border="0" alt="clip_image040[5]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B5%5D_thumb.gif" width="10" height="18" /&gt;&lt;/a&gt;的质量，&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image066_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image066" border="0" alt="clip_image066" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image066_thumb.gif" width="16" height="24" /&gt;&lt;/a&gt;为杆件&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B6%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image040[6]" border="0" alt="clip_image040[6]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B6%5D_thumb.gif" width="10" height="18" /&gt;&lt;/a&gt;的质心在坐标系&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image042%5B5%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image042[5]" border="0" alt="clip_image042[5]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image042%5B5%5D_thumb.gif" width="18" height="24" /&gt;&lt;/a&gt;中的坐标，&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image068_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image068" border="0" alt="clip_image068" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image068_thumb.gif" width="22" height="26" /&gt;&lt;/a&gt;为坐标系&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image042%5B6%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image042[6]" border="0" alt="clip_image042[6]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image042%5B6%5D_thumb.gif" width="18" height="24" /&gt;&lt;/a&gt;中以质心为参考点杆件&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B7%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image040[7]" border="0" alt="clip_image040[7]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B7%5D_thumb.gif" width="10" height="18" /&gt;&lt;/a&gt;的惯量阵。  &lt;/p&gt;&lt;p&gt;（2）第二个迭代过程的方向由叶子节点开始，逐步向根节点进行迭代，目的是求出各个杆件之间的相互作用力。每个杆件受到的力（力矩）包括父杆件作用于本杆件的力（力矩），子杆件作用于本杆件的力（力矩），以及重力。对于最末端的叶子杆件，不存在子杆件的作用力（即下式中&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image070_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image070" border="0" alt="clip_image070" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image070_thumb.gif" width="50" height="24" /&gt;&lt;/a&gt;，&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image072_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image072" border="0" alt="clip_image072" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image072_thumb.gif" width="54" height="24" /&gt;&lt;/a&gt;），因此可以从子杆件开始算起，逐步推导出各个杆件之间的相互作用力（力矩）。  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image074_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image074" border="0" alt="clip_image074" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image074_thumb.gif" width="104" height="26" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image076_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image076" border="0" alt="clip_image076" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image076_thumb.gif" width="240" height="23" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;其中&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image078_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image078" border="0" alt="clip_image078" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image078_thumb.gif" width="14" height="24" /&gt;&lt;/a&gt;、&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image080_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image080" border="0" alt="clip_image080" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image080_thumb.gif" width="18" height="24" /&gt;&lt;/a&gt;分别为杆件&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B8%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image040[8]" border="0" alt="clip_image040[8]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B8%5D_thumb.gif" width="10" height="18" /&gt;&lt;/a&gt;经由关节&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B9%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image040[9]" border="0" alt="clip_image040[9]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B9%5D_thumb.gif" width="10" height="18" /&gt;&lt;/a&gt;而受到的力、力矩。  &lt;/p&gt;&lt;p&gt;最后可求出杆件在某个轴向上所受到的力矩的大小（标量）：  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image082_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image082" border="0" alt="clip_image082" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image082_thumb.gif" width="60" height="26" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a name="_Ref267842278"&gt;3. 迭代计算的优越性&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;现在我们已经知道了如何利用迭代牛顿欧拉算法进行计算，我们再来看看为何要进行&amp;#8220;迭代&amp;#8221;计算。实际上，不进行迭代也可以计算出结果，然而不进行迭代将会存在过多的冗余计算，大大影响计算效率。我们将以速度的计算为例来说明，为了叙述简单，我们设各个关节只有一个自由度，各个速度量表示在一个公共坐标系（而不是各个杆件的局部坐标系）下。因此利用递归方法杆件&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B10%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image040[10]" border="0" alt="clip_image040[10]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B10%5D_thumb.gif" width="10" height="18" /&gt;&lt;/a&gt;的速度表达式为：  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image084_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image084" border="0" alt="clip_image084" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image084_thumb.gif" width="118" height="26" /&gt;&lt;/a&gt; &lt;a name="ZEqnNum416183"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;设根节点处的速度为&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image086_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image086" border="0" alt="clip_image086" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image086_thumb.gif" width="42" height="24" /&gt;&lt;/a&gt;。非递归方法杆件&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B11%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image040[11]" border="0" alt="clip_image040[11]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image040%5B11%5D_thumb.gif" width="10" height="18" /&gt;&lt;/a&gt;的速度表达式为：  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image088_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image088" border="0" alt="clip_image088" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image088_thumb.gif" width="108" height="48" /&gt;&lt;/a&gt; &lt;a name="ZEqnNum344864"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;设&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image090_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image090" border="0" alt="clip_image090" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image090_thumb.gif" width="18" height="14" /&gt;&lt;/a&gt;代表一个标量与向量相乘的计算代价，&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image092_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image092" border="0" alt="clip_image092" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image092_thumb.gif" width="14" height="14" /&gt;&lt;/a&gt;代表两个向量进行相加的计算代价。那么调用一次递归式的计算代价为&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image094_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image094" border="0" alt="clip_image094" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image094_thumb.gif" width="40" height="16" /&gt;&lt;/a&gt;，调用一次非递归式的计算代价为&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image096_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image096" border="0" alt="clip_image096" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image096_thumb.gif" width="82" height="22" /&gt;&lt;/a&gt;，则利用递归式计算机器人前&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image098_3.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image098" border="0" alt="clip_image098" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image098_thumb.gif" width="14" height="14" /&gt;&lt;/a&gt;个杆件的计算代价为&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image100_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image100" border="0" alt="clip_image100" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image100_thumb.gif" width="60" height="22" /&gt;&lt;/a&gt;，而利用非递归式进行相应计算的代价为&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image102_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image102" border="0" alt="clip_image102" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image102_thumb.gif" width="162" height="42" /&gt;&lt;/a&gt;。因此，利用递归计算式获得了复杂度为&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image104_5.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image104" border="0" alt="clip_image104" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image104_thumb.gif" width="36" height="22" /&gt;&lt;/a&gt;的高效率计算，而利用非递归计算式则获得复杂度为&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image106_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image106" border="0" alt="clip_image106" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image106_thumb.gif" width="42" height="24" /&gt;&lt;/a&gt;的低效率计算。  &lt;/p&gt;&lt;p&gt;非递归式计算效率低的原因在于进行了过多的冗余计算：  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image108_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image108" border="0" alt="clip_image108" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image108_thumb.gif" width="214" height="102" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;可见&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image110_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image110" border="0" alt="clip_image110" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image110_thumb.gif" width="38" height="26" /&gt;&lt;/a&gt;这一项被重复计算了&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image098%5B1%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image098[1]" border="0" alt="clip_image098[1]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image098%5B1%5D_thumb.gif" width="14" height="14" /&gt;&lt;/a&gt;次，&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image113_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image113" border="0" alt="clip_image113" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image113_thumb.gif" width="36" height="26" /&gt;&lt;/a&gt;被计算了&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image115_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image115" border="0" alt="clip_image115" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image115_thumb.gif" width="34" height="18" /&gt;&lt;/a&gt;次，等等。递归算法避免了此类冗余计算，因而获得了高效率。  &lt;/p&gt;&lt;p&gt;当公式越复杂时，递归与非递归获得的效率差别更大。例如利用递归来计算加速度，则复杂度由&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image117_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image117" border="0" alt="clip_image117" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image117_thumb.gif" width="42" height="24" /&gt;&lt;/a&gt;降为&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image104%5B1%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image104[1]" border="0" alt="clip_image104[1]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image104%5B1%5D_thumb.gif" width="36" height="22" /&gt;&lt;/a&gt;，而力矩的计算则更是从复杂度&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image120_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image120" border="0" alt="clip_image120" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image120_thumb.gif" width="42" height="24" /&gt;&lt;/a&gt;降为&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image104%5B2%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image104[2]" border="0" alt="clip_image104[2]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image104%5B2%5D_thumb.gif" width="36" height="22" /&gt;&lt;/a&gt;。因此迭代牛顿欧拉算法实现了复杂度为&lt;a href="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image104%5B3%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image104[3]" border="0" alt="clip_image104[3]" src="http://images.cnblogs.com/cnblogs_com/ArenAK/WindowsLiveWriter/RobotInverseDynamics_10771/clip_image104%5B3%5D_thumb.gif" width="36" height="22" /&gt;&lt;/a&gt;的逆动力学计算。  &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;说明：本文3、4节内容大多参考了文献[3]。  &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;[1] C. Rose&lt;em&gt;, et al.&lt;/em&gt;, "Efficient generation of motion transitions using spacetime constraints," presented at the Proceedings of the 23rd annual conference on Computer graphics and interactive techniques, 1996.  &lt;/p&gt;&lt;p&gt;[2] 霍伟, &lt;em&gt;机器人动力学与控制&lt;/em&gt;: 高等教育出版社, 2005.  &lt;/p&gt;&lt;p&gt;[3] R. Featherstone, &lt;em&gt;Rigid Body Dynamics Algorithms&lt;/em&gt;: Springer-Verlag New York, Inc., 2007.   &lt;/p&gt;&lt;img src="http://www.cnblogs.com/ArenAK/aggbug/1784782.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ArenAK/archive/2010/07/25/1784782.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ArenAK/archive/2010/06/07/1753427.html</id><title type="text">刚体动力学（Rigid Body Dynamics）</title><summary type="text">本文讲解刚体动力学（Rigid Body Dynamics）学习过程中的几个关键问题。其中1节介绍向量、矩阵在不同坐标系下的转换及其作用，2节介绍用矩阵表示的向量叉积并利用其表述矩阵的求导计算，3节利用1、2节的内容导出实用的牛顿-欧拉动力学公式。</summary><published>2010-06-07T11:20:00Z</published><updated>2010-06-07T11:20:00Z</updated><author><name>任程</name><uri>http://www.cnblogs.com/ArenAK/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ArenAK/archive/2010/06/07/1753427.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ArenAK/archive/2010/06/07/1753427.html"/><content type="html">&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;注：由于编辑器原因，本页面为图片格式，如果图片格式影响您的阅读，您可&lt;a href="http://files.cnblogs.com/ArenAK/%E5%88%9A%E4%BD%93%E5%8A%A8%E5%8A%9B%E5%AD%A6.pdf" target="_blank"&gt;在此下载本文pdf格式&lt;/a&gt;。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/26595/2011091911240434.png" width="617" height="968" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/26595/2011091911261161.png" width="677" height="1055" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/26595/2011091911272291.png" width="661" height="1048" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/26595/2011091911282451.png" width="613" height="1044" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/26595/2011091911302823.png" width="625" height="1082" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/26595/2011091911325836.png" width="591" height="381" /&gt;&lt;span style="font-size: small;" size="3"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: small;" size="3"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/ArenAK/aggbug/1753427.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ArenAK/archive/2010/06/07/1753427.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ArenAK/archive/2008/06/30/1232765.html</id><title type="text">Flock of Birds——总结使用过的虚拟现实设备之二(A Brief Summary of Several VR Devices) </title><summary type="text">讲解了Flock of Birds跟踪器的优缺点，着重描述了其使用步骤。</summary><published>2008-06-30T15:05:00Z</published><updated>2008-06-30T15:05:00Z</updated><author><name>任程</name><uri>http://www.cnblogs.com/ArenAK/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ArenAK/archive/2008/06/30/1232765.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ArenAK/archive/2008/06/30/1232765.html"/></entry><entry><id>http://www.cnblogs.com/ArenAK/archive/2008/06/18/1224567.html</id><title type="text">多通道软件同步——代码设计</title><summary type="text">本文主要说明用软件实现多通道同步时代码设计的思想，其涉及到两个层次：DataLock、SwapLock。</summary><published>2008-06-18T04:49:00Z</published><updated>2008-06-18T04:49:00Z</updated><author><name>任程</name><uri>http://www.cnblogs.com/ArenAK/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ArenAK/archive/2008/06/18/1224567.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ArenAK/archive/2008/06/18/1224567.html"/></entry><entry><id>http://www.cnblogs.com/ArenAK/archive/2008/05/09/1189610.html</id><title type="text">多通道的同步问题</title><summary type="text">对于一个通道对应于的多通道系统，同步问题包括三个方面或者说是涉及到三个层次：DataLock、SwapLock、GenLock。本文讲述三种Lock的作用，并重点叙述Genlock的实现方法。</summary><published>2008-05-09T04:51:00Z</published><updated>2008-05-09T04:51:00Z</updated><author><name>任程</name><uri>http://www.cnblogs.com/ArenAK/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ArenAK/archive/2008/05/09/1189610.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ArenAK/archive/2008/05/09/1189610.html"/></entry><entry><id>http://www.cnblogs.com/ArenAK/archive/2008/04/21/1164726.html</id><title type="text">《自己实现EarthSculptor的Splatting地形》的源代码</title><summary type="text">《自己实现EarthSculptor的Splatting地形》的源代码与资源文件</summary><published>2008-04-21T15:06:00Z</published><updated>2008-04-21T15:06:00Z</updated><author><name>任程</name><uri>http://www.cnblogs.com/ArenAK/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ArenAK/archive/2008/04/21/1164726.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ArenAK/archive/2008/04/21/1164726.html"/></entry><entry><id>http://www.cnblogs.com/ArenAK/archive/2008/04/05/1138102.html</id><title type="text">Interesting story about DI-Guy</title><summary type="text">Interesting story about DI-Guy: Badler and DI-Guy, me and Badler.</summary><published>2008-04-05T03:37:00Z</published><updated>2008-04-05T03:37:00Z</updated><author><name>任程</name><uri>http://www.cnblogs.com/ArenAK/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ArenAK/archive/2008/04/05/1138102.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ArenAK/archive/2008/04/05/1138102.html"/></entry></feed>
