private void indeksy(T3d projektor, Punkt obserwator, Graphics g) { //DIAGNOSTYKA FUNKCJI: Stopwatch zegar = new Stopwatch(); zegar.Start(); //WYRYSOWYWANIE GRANIC OBSZARU ROBOCZEGO: Punkt[] obszar = new Punkt[8]; Point[] _obszar = new Point[8]; obszar[0] = new Punkt(-25, -25, -25); obszar[1] = new Punkt(25, -25, -25); obszar[2] = new Punkt(25, 25, -25); obszar[3] = new Punkt(-25, 25, -25); obszar[4] = new Punkt(-25, -25, 25); obszar[5] = new Punkt(25, -25, 25); obszar[6] = new Punkt(25, 25, 25); obszar[7] = new Punkt(-25, 25, 25); for (int i = 0; i < 8; i++) { projektor.punkt_3d(out _obszar[i], obszar[i]); } g.DrawLine(p, _obszar[0], _obszar[1]); g.DrawLine(p, _obszar[1], _obszar[2]); g.DrawLine(p, _obszar[2], _obszar[3]); g.DrawLine(p, _obszar[3], _obszar[0]); g.DrawLine(p, _obszar[4], _obszar[5]); g.DrawLine(p, _obszar[5], _obszar[6]); g.DrawLine(p, _obszar[6], _obszar[7]); g.DrawLine(p, _obszar[7], _obszar[4]); g.DrawLine(p, _obszar[0], _obszar[4]); g.DrawLine(p, _obszar[1], _obszar[5]); g.DrawLine(p, _obszar[2], _obszar[6]); g.DrawLine(p, _obszar[3], _obszar[7]); //OBLICZANIE NAJDALSZEGO PUNKTU OBSZARU: double max = 0; Punkt najdalszy = new Punkt(); for (int i = 0; i < 8; i++) { double nowa = obszar[i].odleglosc(obserwator); if (nowa > max) { max = nowa; najdalszy = obszar[i]; } } int i_start = (int)najdalszy.x + (rozmiar / 2); int j_start = (int)najdalszy.y + (rozmiar / 2); int k_start = (int)najdalszy.z + (rozmiar / 2); //RYSOWANIE KOSTEK: int ii = 1; for (int i = i_start + (i_start == 0 ? 1 : -2); ii < rozmiar - 1;) { int jj = 1; for (int j = j_start + (j_start == 0 ? 1 : -2); jj < rozmiar - 1;) { int kk = 1; for (int k = k_start + (k_start == 0 ? 1 : -2); kk < rozmiar - 1;) { if (tab[i, j, k] == 1) { for (int l = 0; l < kostki[i, j, k].granice.Length; l++) { projektor.punkt_3d(out kostki[i, j, k]._granice[l], kostki[i, j, k].granice[l]); } sb.Color = Color.FromArgb(255, 255 - i, 255 - 2 * j, 255 - 3 * k); kostki[i, j, k].rysuj(sb, g, obserwator); } if (k_start == 0) { k++; } else { k--; } kk++; } if (j_start == 0) { j++; } else { j--; } jj++; } if (i_start == 0) { i++; } else { i--; } ii++; } zegar.Stop(); labelTick.Text = "Odświeżenie zajęło: " + zegar.ElapsedTicks + " ticki/ów (Metoda wyświetlania: Indeksy)"; }
private void sorty(T3d projektor, Punkt obserwator, Graphics g) { //DIAGNOSTYKA FUNKCJI: Stopwatch zegar = new Stopwatch(); zegar.Start(); //WYRYSOWYWANIE GRANIC OBSZARU ROBOCZEGO: Punkt[] obszar = new Punkt[8]; Point[] _obszar = new Point[8]; obszar[0] = new Punkt(-25, -25, -25); obszar[1] = new Punkt(25, -25, -25); obszar[2] = new Punkt(25, 25, -25); obszar[3] = new Punkt(-25, 25, -25); obszar[4] = new Punkt(-25, -25, 25); obszar[5] = new Punkt(25, -25, 25); obszar[6] = new Punkt(25, 25, 25); obszar[7] = new Punkt(-25, 25, 25); for (int i = 0; i < 8; i++) { projektor.punkt_3d(out _obszar[i], obszar[i]); } g.DrawLine(p, _obszar[0], _obszar[1]); g.DrawLine(p, _obszar[1], _obszar[2]); g.DrawLine(p, _obszar[2], _obszar[3]); g.DrawLine(p, _obszar[3], _obszar[0]); g.DrawLine(p, _obszar[4], _obszar[5]); g.DrawLine(p, _obszar[5], _obszar[6]); g.DrawLine(p, _obszar[6], _obszar[7]); g.DrawLine(p, _obszar[7], _obszar[4]); g.DrawLine(p, _obszar[0], _obszar[4]); g.DrawLine(p, _obszar[1], _obszar[5]); g.DrawLine(p, _obszar[2], _obszar[6]); g.DrawLine(p, _obszar[3], _obszar[7]); l_kostki.Sort(); foreach (Kostka kos in l_kostki) { int i = (int)kos.granice[0].x + rozmiar / 2; int j = (int)kos.granice[0].y + rozmiar / 2; int k = (int)kos.granice[0].z + rozmiar / 2; if (tab[i, j, k] == 1) { for (int l = 0; l < kos.granice.Length; l++) { projektor.punkt_3d(out kos._granice[l], kos.granice[l]); } sb.Color = Color.FromArgb(255, 255 - i, 255 - 2 * j, 255 - 3 * k); kos.rysuj(sb, g, obserwator); } } zegar.Stop(); labelTick.Text = "Odświeżenie zajęło: " + zegar.ElapsedTicks + " ticki/ów (Metoda wyświetlania: Sort)"; }