using System; namespace Science.Physics.GeneralPhysics { /// /// Relativity /// public class Relativity { public Relativity() { } private static double c = Constant.SpeedOfLightInVacuum; public static Time TimeDilation(Time t, Velocity v) { Time tp = new Time(); double gamma = 1.0/Math.Sqrt(1.0-v.mPERs*v.mPERs/c/c); tp.s = gamma*t.s; return tp; } public static Length LengthContraction(Length l, Velocity v) { Length lp = new Length(); double gamma = 1.0/Math.Sqrt(1.0-v.mPERs*v.mPERs/c/c); lp.m = l.m/gamma; return lp; } public static void LorentzTransformation(Position x, Time t, Position xp, Time tp, Velocity v) { double gamma = 1.0/Math.Sqrt(1.0-v.mPERs*v.mPERs/c/c); xp.X = gamma*(x.X - v.X*t.s); xp.Y = x.Y; xp.Z = x.Z; tp.s = gamma*(t.s - v.X/c/c*x.X); } public static void LorentzTransformationForVelocity(Velocity u, Velocity up, Velocity v) { double gamma = 1.0/Math.Sqrt(1.0-v.mPERs*v.mPERs/c/c); double denomi = 1.0 - u.X*v.X/c/c; up.X = (u.X - v.X)/denomi; up.Y = u.Y/gamma/denomi; up.Z = u.Z/gamma/denomi; } public static double RestEnergy(Mass m) { return m.kg*c*c; } public static Vector Momentum(Mass m, Velocity u) { double gamma = 1.0/Math.Sqrt(1.0-u.mPERs*u.mPERs/c/c); return gamma*m.kg*u; } public static double TotalEnergy(Mass m, Velocity u) { double gamma = 1.0/Math.Sqrt(1.0-u.mPERs*u.mPERs/c/c); return gamma*m.kg*c*c; } } }