Exemple #1
0
//----------RYSOWANIE----------//
        public void nowyPanel1_Paint(object sender, PaintEventArgs e)
        {
            //PODSTAWOWE DEKLARACJE:
            Graphics g          = e.Graphics;
            Punkt    obserwator = Punkt.RFiTetaToXYZ(r, fi, teta);
            T3d      projektor  = new T3d(obserwator, nowyPanel1.ClientRectangle);

            if (wyswietlanie == 0)
            {
                indeksy(projektor, obserwator, g);
            }
            else
            {
                sorty(projektor, obserwator, g);
            }
        }
Exemple #2
0
        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)";
        }
Exemple #3
0
        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)";
        }