/// <returns>true if the basis blade scales of A and B match. Blades which are not present in both A and B are ignored</returns> public static bool BasisBladeScalesMatch(MV A, MV B) { if (A == null) { Console.WriteLine("Arrr!"); } if (B == null) { Console.WriteLine("Arrr!"); } Dictionary <Tuple <int, int>, Tuple <int, int> > D = GetCoordMap(A, B); foreach (KeyValuePair <Tuple <int, int>, Tuple <int, int> > kvp in D) { BasisBlade a = A.Group(kvp.Key.Value1)[kvp.Key.Value2]; BasisBlade b = B.Group(kvp.Value.Value1)[kvp.Value.Value2]; if (a.scale != b.scale) { return(false); } } return(true); }
/// <summary> /// Generates a map. For each coordinate in 'src', tells you where it is found in 'dst', /// or that it is not present. /// </summary> /// <param name="src">Src multivector (can be SMV or GMV).</param> /// <param name="dst">Dst multivector (can be SMV or GMV).</param> /// <returns>The first entry of each pair is the group, the second entry is the entry.</returns> public static Dictionary <Tuple <int, int>, Tuple <int, int> > GetCoordMap(MV src, MV dst) { Dictionary <Tuple <int, int>, Tuple <int, int> > D = new Dictionary <Tuple <int, int>, Tuple <int, int> >(); for (int g = 0; g < src.m_basisBlades.Length; g++) { for (int e = 0; e < src.m_basisBlades[g].Length; e++) { RefGA.BasisBlade srcB = src.m_basisBlades[g][e]; int groupIdx = dst.GetGroupIdx(srcB); if (groupIdx >= 0) { int elementIdx = dst.GetElementIdx(srcB); D[new Tuple <int, int>(g, e)] = new Tuple <int, int>(groupIdx, elementIdx); } } } return(D); }
/// <summary> /// Generates a map. For each coordinate in 'src', tells you where it is found in 'dst', /// or that it is not present. /// </summary> /// <param name="src">Src multivector (can be SMV or GMV).</param> /// <param name="dst">Dst multivector (can be SMV or GMV).</param> /// <returns>The first entry of each pair is the group, the second entry is the entry.</returns> public static Dictionary<Tuple<int, int>, Tuple<int, int>> GetCoordMap(MV src, MV dst) { Dictionary<Tuple<int, int>, Tuple<int, int>> D = new Dictionary<Tuple<int, int>, Tuple<int, int>>(); for (int g = 0; g < src.m_basisBlades.Length; g++) { for (int e = 0; e < src.m_basisBlades[g].Length; e++) { RefGA.BasisBlade srcB = src.m_basisBlades[g][e]; int groupIdx = dst.GetGroupIdx(srcB); if (groupIdx >= 0) { int elementIdx = dst.GetElementIdx(srcB); D[new Tuple<int, int>(g, e)] = new Tuple<int, int>(groupIdx, elementIdx); } } } return D; }
/// <returns>true if the basis blade scales of A and B match. Blades which are not present in both A and B are ignored</returns> public static bool BasisBladeScalesMatch(MV A, MV B) { if (A == null) { Console.WriteLine("Arrr!"); } if (B == null) { Console.WriteLine("Arrr!"); } Dictionary<Tuple<int, int>, Tuple<int, int>> D = GetCoordMap(A, B); foreach (KeyValuePair<Tuple<int, int>, Tuple<int, int>> kvp in D) { BasisBlade a = A.Group(kvp.Key.Value1)[kvp.Key.Value2]; BasisBlade b = B.Group(kvp.Value.Value1)[kvp.Value.Value2]; if (a.scale != b.scale) return false; } return true; }