剛体に加わる力には
ユーザが設定する外力
重力
関節や接触から加わる拘束力
の種類があり,それぞれについて並進力とトルクがあります. ここで,重力は重力加速度と剛体の質量より決まり,拘束力は拘束条件を満たすように内部で自動的に計算されます. 以下ではユーザが剛体に加える外力を設定・取得する方法を示します.
PHSolidIf |
||
void |
AddForce(Vec3d) |
|
void |
AddTorque(Vec3d) |
|
void |
AddForce(Vec3d, Vec3d) |
|
Vec3d |
GetForce() |
|
Vec3d |
GetTorque() |
並進力を加えるにはAddForceを使います.
solid->AddForce(Vec3d(0.0, -1.0, 0.0));
とすると剛体の質量中心に並進力が加わります.ただし力はグローバル座標系で表現されます. 一方
solid->AddTorque(Vec3d(1.0, 0.0, 0.0));
とすると剛体の質量中心に関してモーメントが加わります. 作用点を任意に指定するには
solid->AddForce(Vec3d(0.0, -1.0, 0.0), Vec3d(0.0, 0.0, 1.0));
とします.この場合は並進力が作用点に加わります. ここで作用点の位置は剛体のローカル座標ではなくグローバル座標で表現されることに注意してください. AddForceやAddTorqueは複数回呼ぶと,それぞれで指定した外力の合力が最終的に剛体に加わる外力となります.
外力を取得するにはGetForce,GetTorqueを使います. ただし,これらの関数で取得できるのは直前のシミュレーションステップで剛体に作用した外力です. したがって直前のシミュレーションステップ後にAddForceした力は取得できません.