/// <summary> /// Top level method for deterimining Time Gradient an object is "in". /// Calculates the time gradient due to proximity to a Mass, as well as to the object's own acceleration /// (check this. Could be double calculating based on Acceleration, and then Velocity on the next line) /// </summary> /// <param name="massBody1"></param> /// <param name="massBody2"></param> /// <param name="additionalDistanceBeyondRadii"></param> /// <returns></returns> public static MassBody CalculateTimeDilation(this MassBody massBody1, MassBody massBody2 = null, double additionalDistanceBeyondRadii = 0) { var massDilation = 1 - (massBody2 != null ? massBody1.GetTimeDilationFactorDueToMass(massBody2, additionalDistanceBeyondRadii) : 1); var velocityDilation = 1 - GetTimeDilationFactorDueToVelocity(massBody1.Velocity); var returnMassBody = massBody1.Copy(); returnMassBody.TimeDilation = 1 - massDilation - velocityDilation; return(returnMassBody); }
//If a mass is experiencing Acceleration / Weight Force / Centrifugal Force, etc, it is not centered within the Time Gradient affecting it //This is simplified. The acceleration should really be a 3D vector in relationship to the vector between the 2 centers of mass public static MassBody CalculateWeightForce(this MassBody massBody1, MassBody massBody2 = null, double additionalDistanceBeyondRadii = 0) { //Should we overwrite any weightforce already in here? var returnMassBody = massBody1.Copy(); if (massBody2 != null) { returnMassBody.WeightForce += WeightForceDueToMass(massBody1, massBody2, additionalDistanceBeyondRadii); } if (massBody1.Acceleration > 0) { returnMassBody.WeightForce += WeightForceDueToAcceleration(massBody1, massBody1.Acceleration, 0); } return(returnMassBody); }