public void AddMapping(Measure current, Measure target, Func<Vector3D, Vector3D> mapping)
 {
     if (!_mapping.ContainsKey(current))
     {
         _mapping.Add(new KeyValuePair<Measure, IDictionary<Measure, Func<Vector3D, Vector3D>>>());
     }
     _mapping[current].Add(target, mapping);
 }
예제 #2
0
 private static void Main()
 {
     DerivedMeasure derivedMeasure = new DerivedMeasure();
     var siMeasures = new SIMeasuresList();
     var d = new Dictionary<Measure, int> {{siMeasures.Kilogram, 1}};
     var pound = new Measure("фунт", d);
     var op1 = new Operand(2, derivedMeasure.Becquerel);
     var op2 = new Operand(4, derivedMeasure.Volt);
     var force = new Vector2DOperand(new Vector2D(Math.Sqrt(2.0)*2, Math.PI/4), derivedMeasure.Newton);
     var path = new Vector2DOperand(new Vector2D(2, 0), siMeasures.Metre);
     Operand op3 = force*path;
     /*  Measure meter = new Measure("meter", 1, new Dictionary<BasicMeasures, int> { { BasicMeasures.Metre, 1 } });
     Operand op1 = new Operand(2, new Dictionary<Measure, int> { { meter, 1 } });
     Operand op2 = new Operand(1, new Dictionary<Measure, int> { { meter, 1 } });
     var op3 = PhysicsMath.Pow(op1,3);*/
 }
        public bool TryConvert(Vector3DOperand operand, Measure current, Measure target, out Vector3DOperand result)
        {
            if (!_mapping.ContainsKey(current))
            {
                result = null;
                return false;
            }

            if (!_mapping[current].ContainsKey(target))
            {
                result = null;
                return false;
            }
            result = new Vector3DOperand(_mapping[current][target].Invoke(operand.Value), target);
            return true;
        }
 public static bool CheckForEqualsSi(Measure measure1, Measure measure2)
 {
     if (measure1.IsBasicIsMeasure && measure2.IsBasicIsMeasure)
     {
         return true;
     }
     var measure1Si = measure1.SIequivalent;
     var measure2Si = measure2.SIequivalent;
     if (measure2Si.Count != measure1Si.Count)
         return false;
     foreach (var variable in measure1Si.Keys)
     {
         if (!measure2Si.ContainsKey(variable))
             return false;
         if (measure2Si[variable] != measure1Si[variable])
             return false;
     }
     return true;
 }
예제 #5
0
 protected bool Equals(Measure other)
 {
     return string.Equals(Name, other.Name);
 }
        public Measure Standardize(Measure measure)
        {
            Measure result;
            try
            {
                result = _measures.First(x => MeasureCalculator.CheckForEqualsSi(measure, x));
            }
            catch (Exception)
            {

                result = measure;
            }
            return result;
        }
 public static Measure Inverse(Measure measure)
 {
     var derivedMeasure = new DerivedMeasure();
     return
         derivedMeasure.Standardize(new Measure("unnamed", Inverse(measure.Equivalent), Inverse(measure.SIequivalent)));
 }
 public static Measure Divide(Measure measure1, Measure measure2)
 {
     var derivedMeasure = new DerivedMeasure();
     return derivedMeasure.Standardize(Multiply(measure1, Inverse(measure2)));
 }
 public static Measure Root(Measure measure, int pow)
 {
     var derivedMeasure = new DerivedMeasure();
     return derivedMeasure.Standardize(new Measure("unnamed", Root(measure.Equivalent, pow), Root(measure.SIequivalent, pow)));
 }
 public static Measure Multiply(Measure measure1, Measure measure2)
 {
     var derivedMeasure = new DerivedMeasure();
     return derivedMeasure.Standardize(new Measure("unnamed", Multiply(measure1.Equivalent, measure2.Equivalent),
         Multiply(measure1.SIequivalent, measure2.SIequivalent)));
 }