質量パラメータを表すdMass構造体は、以下に示すように質量、重心、慣性テンソルのメンバにより構成されます。
struct dMass {
dReal mass; // 質量
dVector3 c; // 重心
dMatrix3 I; // 慣性テンソル
};
それぞれのパラメータの初期値は質量1.0、重心 (0.0, 0.0, 0.0) で、慣性テンソルは単位行列となっています。
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種類があります。これらの関数は、関数名以外の引数は同一です。
球体 (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 // 長さ
);
|
dMass構造体のすべてのパラメータ (質量、重心、慣性テンソル) を0にします。
void dMassSetZero ( dMass * );
質量がnewmassになるように調整します。これはdMassSetXx()によって密度から設定した場合に、その質量を設定するのに有効です。
void dMassAdjust ( dMass *, dReal newmass );
ボディに対する相対座標で、重心が位置 (x,y,z) になるように調整します。
void dMassTranslate (dMass *mass, dReal x, dReal y, dReal z );
ボディに対する相対座標で、回転行列Rによって回転させます。
void dMassRotate (dMass *mass, const dMatrix3 R );
質量パラメータaに、質量パラメータbを加算します。
void dMassAdd ( dMass *a, const dMass *b );