私は、直交する(体の方向に)力を加え、必要なトルクを生成することによって、体をそれ自体の中心の周りで回転させようとしています。しかし、これは(自然に)体も動かし、回転するだけで十分です。これが私のコードです。角度/方向を手動で設定するのではなく、この回転力を使用して設定しようとしていることに注意してください。
cpFloat dot = cpvdot(turningN, cpvnormalize_safe(cpBodyGetRot(body)));
cpFloat cross = cpvcross(turningN, cpvnormalize_safe(cpBodyGetRot(body)));
cpVect rotN;
if (cross<=0) {
rotN = cpvperp(cpvnormalize_safe(cpBodyGetRot(body)));
}else{
rotN = cpvrperp(cpvnormalize_safe(cpBodyGetRot(body)));
}
cpVect rotF = cpvmult(rotN, 300*(1-dot));
cpBodyApplyForce(body, rotF, cpv(75,14));
turningN
体が持つべき方向を決定するベクトルです。体の方向が目的の方向に向かうにつれて、回転が少なくなるように内積を作成します。
編集
したがって、@ DGHが指摘しているように、同じ方向と大きさの力を追加する必要がありますが、回転力とは反対で、オブジェクトの中心に向かっています。したがって、これを機能させるには、次のコード行を追加するだけで済みます。
cpBodyApplyForce(body, cpvneg(rotF), cpvzero);