/** * Add torque at centre of mass of body in absolute coordinates. * @param b b * @param fx fx * @param fy fy * @param fz fz * */ //ODE_API public static void dBodyAddTorque (DBody b, double fx, double fy, double fz){ b.addTorque(fx, fy, fz); }
/** * Add torque at centre of mass of body in absolute coordinates. * @param b b * @param fx fx * @param fy fy * @param fz fz * */ //ODE_API public static void dBodyAddTorque (DBody b, double fx, double fy, double fz){ b.addTorque(fx, fy, fz); }
private void addOscillatingTorqueAbout(double tscale, double x, double y, double z) { //TZ static double a=0; body[0].addTorque( tscale*Math.cos(a_2) * x, tscale*Math.cos(a_2) * y, tscale * Math.cos(a_2) * z); a_2 += 0.02; } private void addOscillatingTorqueAbout(double tscale, DVector3 v)
private void addOscillatingTorque (double tscale) { //TZ static double a=0; body[0].addTorque(tscale*Math.cos(2*a_1),tscale*Math.cos(2.7183*a_1), tscale*Math.cos(1.5708*a_1)); a_1 += 0.01; }
private void addOscillatingTorqueAbout(double tscale, DVector3 v) { //TZ static double a=0; body[0].addTorque( tscale*Math.cos(a_2) * v.get0(), tscale*Math.cos(a_2) * v.get1(), tscale * Math.cos(a_2) * v.get2()); a_2 += 0.02; }
private void dampRotationalMotion (double kd) { DVector3C w = body[0].getAngularVel(); body[0].addTorque (-kd*w.get0(),-kd*w.get1(),-kd*w.get2()); }
body[BODY1].addTorque (0.1,0,0); break; case 'r': case 'R': body[BODY1].addTorque (-0.1,0,0); break; body[BODY1].addTorque (0, 0.1,0); break; case 'f': case 'F': body[BODY1].addTorque (0,-0.1,0); break; body[BODY1].addTorque (0.1,0,0); break; case 'v': case 'V': body[BODY1].addTorque (-0.1,0,0); break;
body.addForceAtPos(dragForce.get0() + buoyancyForce.get0(), buoyancyForce.get1() + dragForce.get1(), buoyancyForce.get2() + dragForce.get2(), position.get0(), position.get1(), position.get2()); body.addTorque(dragTorque);
@Override public void step (boolean pause) { if (!pause) { // add random forces and torques to all bodies int i; final double scale1 = 5; final double scale2 = 5; for (i=0; i<NUM; i++) { body[i].addForce ( scale1*(dRandReal()*2-1), scale1*(dRandReal()*2-1), scale1*(dRandReal()*2-1)); body[i].addTorque ( scale2*(dRandReal()*2-1), scale2*(dRandReal()*2-1), scale2*(dRandReal()*2-1)); } world.step (0.05); createTest(); } // float sides[3] = {SIDE,SIDE,SIDE}; dsSetColor (1,1,0); for (int i=0; i<NUM; i++) dsDrawSphere (body[i].getPosition(), body[i].getRotation(), RADIUS); }
/** * This is the explicit computation of * gyroscopic forces. */ private static void expStep(DBody body) { // Explicit computation DMatrix3 I = new DMatrix3(), tmp = new DMatrix3(); DMassC m = body.getMass(); DMatrix3C R = body.getRotation(); // compute inertia tensor in global frame OdeMath.dMultiply2_333 (tmp,m.getI(),R); OdeMath.dMultiply0_333 (I,R,tmp); // compute explicit rotational force // we treat 'tmp'like a vector, but that's okay. DVector3C w = body.getAngularVel(); OdeMath.dMultiply0_331 (tmp,I,w); DVector3 tau = new DVector3(); DVector3 tmp2 = new DVector3(tmp.get00(), tmp.get01(), tmp.get02()); OdeMath.dCalcVectorCross3(tau,tmp2,w); body.addTorque(tau); }
body[0].addTorque (0,0,0.01); body[1].addTorque (0,0,-0.01); if (iteration == 40) { double a = jointHinge.getAngle (); body[0].addTorque (0,0,0.01); body[1].addTorque (0,0,-0.01); double a = jointHinge.getAngle(); double r = jointHinge.getAngleRate(); body[0].addTorque (0,0,0.01); body[1].addTorque (0,0,-0.01); if (iteration == 40) { double a = jointHinge2.getAngle1 (); body[0].addTorque (0,0,0.01); body[1].addTorque (0,0,-0.01); double a = jointHinge2.getAngle1 (); double r = jointHinge2.getAngle1Rate (); case 804: { body[0].addTorque (0, 0.01*Math.cos(1.5708*a_804), 0); a_804 += 0.01; return dInfinity;
body[0].addTorque ( kd*w.get0(), kd*w.get1()+0.1*Math.cos(a), kd*w.get2()+0.1*Math.sin(a)); world.step (0.05); a += 0.01;
body[0].addTorque (kd*w.get0(),kd*w.get1()+0.1*Math.cos(a),kd*w.get2()+0.1*Math.sin(a)); a += 0.01;