質量パラメータ (Mass parameters)

質量パラメータを表すdMass構造体は、以下に示すように質量、重心、慣性テンソルのメンバにより構成されます。

struct dMass {
  dReal mass;  // 質量
  dVector3 c;  // 重心
  dMatrix3 I;  // 慣性テンソル
};

それぞれのパラメータの初期値は質量1.0、重心 (0.0, 0.0, 0.0) で、慣性テンソルは単位行列となっています。

質量・重心・慣性テンソルの設定 (dMassSetXx)

dMassSetParameters()により、質量・重心・慣性テンソルを設定できます。これは次に示す基本形状以外の、任意形状のボディの質量を設定するときに使用されます。

void dMassSetParameters (
    dMass *mass,                     // 設定対象のdMass構造体
    dReal themass,                   // 質量
    dReal cgx, dReal cgy, dReal cgz, // 重心
    dReal I11, dReal I22, dReal I33, // 慣性テンソル
    dReal I12, dReal I13, dReal I23  //
    );

基本形状の質量パラメータ

基本的な形状についてはその形状のパラメータを与えることで、重心や慣性テンソルを設定できます。形状のパラメータは、ジオメトリのサイズのパラメータに近いものとして理解できます。

おのおのの関数には、質量を直接設定する方法と、密度から質量を求める方法の2種類があります。これらの関数は、関数名以外の引数は同一です。

  • dMassSetXx()※1密度 (Density) から設定
  • dMassSetXxTotal()※1質量 (Mass) から設定
※1 Xxは基本形状の名称
球体 (Sphere)
void dMassSetSphereTotal (
    dMass *mass,
    dReal total_mass,  // 質量
    dReal radius       // 半径
    );
直方体 (Box)
void dMassSetBoxTotal (
    dMass *mass,
    dReal total_mass, // 質量
    dReal lx,         // x軸方向の長さ
    dReal ly,         // y軸方向の長さ
    dReal lz          // z軸方向の長さ
    );
カプセル (Capsule)
void dMassSetCapsuleTotal (
    dMass *mass,
    dReal total_mass, // 質量
    int direction,    // 長軸方向(1=x軸 2=y軸 3=z軸)
    dReal radius,     // 半径
    dReal length      // 長さ
    );
円柱 (Cylinder)
void dMassSetCylinderTotal (
    dMass *mass,
    dReal total_mass,  // 質量
    int direction,     // 長軸方向(1=x軸 2=y軸 3=z軸)
    dReal radius,      // 半径
    dReal length       // 長さ
    );

0に設定 (dMassSetZero)

dMass構造体のすべてのパラメータ (質量、重心、慣性テンソル) を0にします。

void dMassSetZero ( dMass * );

調整 (adjust)

質量

質量がnewmassになるように調整します。これはdMassSetXx()によって密度から設定した場合に、その質量を設定するのに有効です。

void dMassAdjust ( dMass *, dReal newmass );

移動 (Translate)

ボディに対する相対座標で、重心が位置 (x,y,z) になるように調整します。

void dMassTranslate (dMass *mass, dReal x, dReal y, dReal z );

回転 (Rotate)

ボディに対する相対座標で、回転行列Rによって回転させます。

void dMassRotate (dMass *mass, const dMatrix3 R );

質量パラメータの加算 (Add)

質量パラメータaに、質量パラメータbを加算します。

void dMassAdd ( dMass *a, const dMass *b );