質量パラメータを表す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 );