力の印加と取得

剛体に加わる力には

$3$種類があり,それぞれについて並進力とトルクがあります. ここで,重力は重力加速度と剛体の質量より決まり,拘束力は拘束条件を満たすように内部で自動的に計算されます. 以下ではユーザが剛体に加える外力を設定・取得する方法を示します.

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));

とすると剛体の質量中心に並進力$(0, -1, 0)$が加わります.ただし力はグローバル座標系で表現されます. 一方

solid->AddTorque(Vec3d(1.0, 0.0, 0.0));

とすると剛体の質量中心に関してモーメント$(1, 0, 0)$が加わります. 作用点を任意に指定するには

solid->AddForce(Vec3d(0.0, -1.0, 0.0), Vec3d(0.0, 0.0, 1.0));

とします.この場合は並進力$(0, -1, 0)$が作用点$(0, 0, 1)$に加わります. ここで作用点の位置は剛体のローカル座標ではなくグローバル座標で表現されることに注意してください. AddForceAddTorqueは複数回呼ぶと,それぞれで指定した外力の合力が最終的に剛体に加わる外力となります.

外力を取得するにはGetForceGetTorqueを使います. ただし,これらの関数で取得できるのは直前のシミュレーションステップで剛体に作用した外力です. したがって直前のシミュレーションステップ後にAddForceした力は取得できません.