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