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); }
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; }
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))); }