using System; namespace Science.Physics.GeneralPhysics { /// /// MagneticField /// public class MagneticField : Vector { private void SetDim() { this.DimensionMass = 1; this.DimensionLength = 0; this.DimensionTime = -1; this.DimensionCharge = -1; } public MagneticField() { SetDim(); } public MagneticField(Vector.Field B) : base(B) { SetDim(); } public double T { get{return this.Norm;} } public double WbPERmSQUARE { get{return this.Norm;} } private double x0, y0, z0; public void BiotSavartLaw(ElectricCurrent I, Line l, Position x) { x0 = x.X; y0 = x.Y; z0 = x.Z; Vector v = new Vector(); v.VectorField = new Vector.Field(rhatoverrsquare); Time td = new Time(); Vector res = VectorCalculus.LineIntegralCross(v,l,td); this.X = -Constant.PermeabilityOfFreeSpace*I.A/4.0/Math.PI*res.X; this.Y = -Constant.PermeabilityOfFreeSpace*I.A/4.0/Math.PI*res.Y; this.Z = -Constant.PermeabilityOfFreeSpace*I.A/4.0/Math.PI*res.Z; } private Vector rhatoverrsquare(Position x, Time t) { Vector x0mx = new Vector(); double r = Math.Sqrt( (x0 - x.X)*(x0 - x.X) +(y0 - x.Y)*(y0 - x.Y) +(z0 - x.Z)*(z0 - x.Z) ); x0mx.X = (x0 - x.X)/r/r/r; x0mx.Y = (y0 - x.Y)/r/r/r; x0mx.Z = (z0 - x.Z)/r/r/r; return x0mx; } public override string ToString() { return base.ToString() + "(T)"; } } }