예제 #1
0
        private void ExpandAxes()
        {
            int q = BaseAxes.Length;

            PAxis[] CAxes = new PAxis[MaxNAxes];
            for (int i = 0; i < q; i++)
            {
                PBaseAxis ax = BaseAxes[i];
                ax.Id = i;
                ax.ExpandPrimaryTwists();
                CAxes[i] = new PAxis(ax); // matrix=id
            }
            for (int p = 0; p < q; p++)
            {
                double[] R = CAxes[p].Dir;
                foreach (double [] G in Group)
                {
                    double[] v = PGeom.ApplyTwist(G, R);
                    int      j;
                    bool     qr;
                    for (j = 0; j < q; j++)
                    {
                        if (PGeom.AxisEqual(v, CAxes[j].Dir, out qr))
                        {
                            break;
                        }
                    }
                    if (j == q)
                    {
                        if (q == MaxNAxes)
                        {
                            throw new Exception("Too many axes");
                        }
                        CAxes[q] = new PAxis(CAxes[p], G);
                        q++;
                    }
                }
            }
            Axes = new PAxis[q];
            for (int i = 0; i < q; i++)
            {
                Axes[i]    = CAxes[i];
                Axes[i].Id = i;
            }
        }