Exemple #1
0
        private void nextRotate()
        {
            if (G_init_steps == 0)
            {
                return;
            }
            G_init_steps--;

            int n2 = 3 * N * 2;
            int part = N * 2;
            Random rand = new Random();

            EasingTimer.rotateAxisType[] axes = new EasingTimer.rotateAxisType[3] {
                EasingTimer.rotateAxisType.X,
                EasingTimer.rotateAxisType.Y,
                EasingTimer.rotateAxisType.Z
            };

            int r = rand.Next(n2);
            int two_mod;
            int two_div = Math.DivRem(r, 2, out two_mod);
            if (prev_two_div == two_div && prev_two_mod != two_mod)
            {
                //чтобы не было такого, что одна часть вращается в одну сторону, а потом тут же в другую
                r = (r + 2) % n2;
            }
            prev_two_div = two_div;
            prev_two_mod = two_mod;

            int axis_n = (int)Math.Floor((double)(r / part));
            EasingTimer.rotateAxisType axis = axes[axis_n];
            r -= axis_n * part;
            int dir;
            int rotate_n = Math.DivRem(r, 2, out dir);
            dir = dir == 0 ? 1 : -1;

            EasingTimer.rotate(rotate_n, rotatePart, angles, dir, axis, nextRotate);
        }
Exemple #2
0
        private void newToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int n2 = 3 * N * 2;
            int part = N * 2;
            Random rand = new Random();

            EasingTimer.rotateAxisType[] axes = new EasingTimer.rotateAxisType[3] {
                EasingTimer.rotateAxisType.X,
                EasingTimer.rotateAxisType.Y,
                EasingTimer.rotateAxisType.Z
            };

            prev_two_div = -1;
            prev_two_mod = -1;
            for (int p = 0; p < 20; p++)
            {
                int r = rand.Next(n2);//n2
                int two_mod;
                int two_div = Math.DivRem(r, 2, out two_mod);
                if (prev_two_div == two_div && prev_two_mod != two_mod)
                {
                    //чтобы не было такого, что одна часть вращается в одну сторону, а потом тут же в другую
                    r = (r + 2) % n2;
                }
                prev_two_div = two_div;
                prev_two_mod = two_mod;

                int axis_n = (int)Math.Floor((double)(r / part));
                EasingTimer.rotateAxisType axis = axes[axis_n];
                r -= axis_n * part;
                int dir;
                int rotate_n = Math.DivRem(r, 2, out dir);
                dir = dir == 0 ? 1 : -1;
                rotatePartFast(axis, rotate_n, dir);
            }
            glControl1.Invalidate();
        }