internal int FindTwist(double[] p, double[,] matr, out bool qrev) { double[] q = PGeom.ApplyMatrixToTwist(matr, p); qrev = false; for (int i = 0; i < Twists.Length; i++) { if (PGeom.TwistsEqual(q, Twists[i], out qrev)) { return(i); } } throw new Exception("Can't fing twist"); }
internal void ExpandPrimaryTwists() { const int MaxNTwists = 256; NPrimaryTwists = Twists.Length; PBaseTwist[] twst = new PBaseTwist[MaxNTwists]; int q = 0; foreach (PBaseTwist tw in Twists) { twst[q++] = tw; } for (int p = 0; p < q; p++) { double[] v = twst[p].Dir; for (int i = 0; i < q; i++) { double[] w = PGeom.ApplyTwist(twst[i].Dir, v); int k; bool qr; for (k = 0; k < q; k++) { if (PGeom.TwistsEqual(w, twst[k].Dir, out qr)) { break; } } if (k == q) { if (q == MaxNTwists) { throw new Exception("Too many planes"); } twst[q] = new PBaseTwist(w); q++; } } } Twists = new PBaseTwist[q]; for (int i = 0; i < q; i++) { Twists[i] = twst[i]; } }