非线性投影解释

时间:2013-07-28 03:00:22

标签: algorithm math physics physics-engine

我正在读一本关于构建物理引擎的书。我目前坚持非线性投影,这是一种解决刚体之间渗透的方法,因为我不完全理解代码。

以下是我理解的简要说明。非线性投影比线性投影更可信,因为它增加了线性投影的旋转。这本书使用了这个算法:

        
  1. 计算总惯量。存在线性惯性,即物体的反质量,并且存在角惯性,其根据物体的惯性矩计算。     
  2. 沿着与线性惯性成比例的接触法线(矢量)线性移动每个物体。那将是[接触法向矢量] *穿透*(线性惯性)/(总惯性)     
  3. 按角惯性旋转每个对象。那将是[某些旋转方向] *穿透*(角惯性)/(总惯性)

线性惯性:我完全理解线性惯性部分。

角度惯性:本书使用以下算法计算物体的角惯性,我不明白,因为它没有给出任何解释并将每一步分配给同一个变量angularInertiaWorld。

        
  1. 确定相对接触位置,即接触位置(作为矢量)减去物体的质心位置(另一个矢量)或位置。因此,相对接触位置相对于物体。     
  2. 做这个数学:(相对接触位置)(交叉产品)(接触正常)。接触法线是垂直于接触表面的矢量。     
  3. 通过对象的反惯性张量转换在步骤2中得到的内容,将步骤2的结果转换为世界坐标     
  4. 做这个数学:(步骤3的结果)(交叉产品)(相对接触位置)     
  5. 做这个数学:(步骤4的结果)(dotproduct)(联系正常)

我想知道算法的每一步发生了什么。我能想出的就是你从一些值开始,你得到的值应该是对象的角惯性。

线性投影:我完全理解非线性投影算法的线性部分。

角度旋转:本书使用此算法计算旋转对象的量。这里有一些更有意义的变量名称,这有助于我理解更多的东西。

        
  1. 计算一个脉冲扭矩,我相信这是一个脉冲单位产生的旋转量。这是通过做(相对接触位置)(交叉产品)(接触正常)来计算的     
  2. 计算1个单位移动所需的冲量。这是通过用反惯性张量转换脉冲转矩来完成的。     
  3. 计算每单位移动的旋转量。这是通过将每单位运动的脉冲除以角惯性来完成的。     
  4. 计算您想要旋转主体的数量。这是通过将每单位运动的旋转量(矢量)乘以(穿透量)*(角惯性)/(总惯性)来完成的。     
  5. 将旋转的数量添加到四元数中,我已理解。

我得到了所有单位分析和书中所做的冲动以达到轮换金额。我不太了解的是反惯性张量的使用。

也许我还没有完全理解这一点。我原本以为它就像一个物体的标量惯性矩,用于扭矩= I * alpha,其中我是惯性矩,alpha是角加速度。然后,当你施加扭矩时,你得到α=扭矩/ I,所以将扭矩乘以反转惯性矩会得到alpha。结果,我认为这就是反惯性张量的原因。

如果有人能向我解释它是如何在这里使用的话,我将不胜感激。


最后,感谢您花时间阅读所有内容。我真的很感激有关角惯性和/或角度旋转部件的任何解释。

1 个答案:

答案 0 :(得分:0)

关于角度惯性:

在此算法中,您可以计算速度的变化,作为对象垂直于物体表面的力的响应(接触法线向量是法向力向量):

步骤2 :(相对接触位置)x(接触法线[力])=(转动惯量)

步骤3 :(反惯性张量)应用于(转动惯量)=(角速度)

步骤4 :(角速度)x(相对接触位置)=(线速度)

步骤5 :(线速度)*(接触法线[力])=施加力方向的速度变化