public virtual bool Move(double dtMS) { // do incremental move of the piece Point2D tempLocation; if (MovementAssist.CalculateNewLocation(CurrentLocation, SpeedMS, TravelDirectionRads, dtMS, out tempLocation)) { CurrentLocation = tempLocation; return(true); } return(false); }
bool RotateTextureZeroPtAboutCentre(Texture2D tex, double hdgRads, out Point2D newZeroPoint) { Point2D textTopPt = new Point2D(); textTopPt.X = -tex.Width / 2; textTopPt.Y = -tex.Height / 2; Point2D rotPt = new Point2D(); rotPt.X = 0.0; rotPt.Y = 0.0; MovementAssist.RotatePoint(rotPt, textTopPt, -hdgRads, out newZeroPoint); Debug.WriteLine("resPt.X = " + newZeroPoint.X.ToString()); Debug.WriteLine("resPt.Y = " + newZeroPoint.Y.ToString()); return(true); }
public override bool Move(double dt) { Debug.WriteLine("dt = " + dt.ToString()); // currently just doing forward motion double forwardPropulsionForce; double rotationalTorque; if (CalculateForceAndTorque(dt, out forwardPropulsionForce, out rotationalTorque) == false) { return(false); } double I; if (PhysicsMaths.CalculateMomentOfInertia(DISK_INERTIA_CONSTANT, ROCKET_MASS_KG, ROCKET_RADIUS, out I) == false) { return(false); } Debug.WriteLine("forwardPropulsionForce = " + forwardPropulsionForce.ToString()); Debug.WriteLine("rotationalTorque = " + rotationalTorque.ToString()); double rotationalFriction; if (PhysicsMaths.CalculateRotationalFrictionTorqueOfDisc(ROCKET_RADIUS, ROCKET_HEIGHT, RateOfRotationRadsSec, AIR_DENSITY, out rotationalFriction) == false) { return(false); } Debug.WriteLine("rotationalFriction = " + rotationalFriction.ToString()); Debug.WriteLine("RateOfRotationRadsSec = " + RateOfRotationRadsSec.ToString()); rotationalTorque = rotationalTorque - rotationalFriction; double rotAccn; if (PhysicsMaths.CalculateRotationalAcceleration(rotationalTorque, I, out rotAccn) == false) { return(false); } // calc rate of rotation RateOfRotationRadsSec += rotAccn; // calc new heading HeadingRads = MovementAssist.RotateHeadingRadians(RateOfRotationRadsSec, HeadingRads, dt); double friction = 0.0; double resultantForce = 0.0; if (PhysicsMaths.CalculateFriction(SpeedMS, CROSS_SECTION, Cd, AIR_DENSITY, out friction)) { Vector powerAndFrictionVector; Debug.WriteLine("HeadingRads = " + HeadingRads.ToString()); Debug.WriteLine(" TravelDirectionRads = " + TravelDirectionRads.ToString()); // calculate the resultant force acting on the if (CalculateResultantForceVector(HeadingRads, forwardPropulsionForce, TravelDirectionRads + Math.PI, friction, out powerAndFrictionVector) == false) { return(false); } Debug.WriteLine("powerAndFrictionVector.Magnitude = " + powerAndFrictionVector.Magnitude.ToString()); if (CalculateNewCourseAndSpeed(powerAndFrictionVector, dt, ROCKET_MASS_KG) == false) { return(false); } } Debug.WriteLine("SpeedMS = " + SpeedMS.ToString()); return(base.Move(dt)); }