IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – Kochová krivky vo WPF

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:23.3.2018 15:19

Krásné aplikace, děkujeme :)

Odpovedať
23.3.2018 15:19
New kid back on the block with a R.I.P
Avatar
Petr Laštovička:27.3.2018 14:02

Před několika lety jsem také programoval Kochovy křivky, ale vyřešil jsem to jednoduše rekurzivní funkcí a umělo to generovat libovolné n-úhelníky. Například šestiúhelníky vypadaly docela hezky. Pro větší počet úhlů už to bylo moc kruhové. Navíc mohl uživatel plynule měnit počet kroků klávesami plus a minus. Nechtěl bys tvoji aplikaci také takto vylepšit ? Pokud ne, mohl bych to udělat já, pokud by ti to nevadilo.

 
Odpovedať
27.3.2018 14:02
Avatar
Bruno Schwarzbach:27.3.2018 16:04

Rekurzi jde určitě použít, dělal jsem tak nedávno Sierpinskeho trojúhelník:

public partial class MainWindow : Window
    {
        public static Canvas c;
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            c = MainCanvas;
            Triangl t = new Triangl();
            t.VytvorObrazec(c.ActualWidth / 4, c.ActualHeight / 8 * 7, c.ActualWidth / 2);
        }
    }

class Triangl
    {
        Point v1, v2, v3;

        public void SpoctiVrcholy(double x, double y, double delka)                                  //metoda výpočtu výšky a poloh vrcholů trojúhelníku
        {
            v1 = new Point(x, y);
            v2 = new Point(x + delka, y);
            double vyska = VyskaTrojuhel(delka);                                                    //pro výpočet 3. vrcholu je použita i výška
            v3 = new Point(x + delka / 2, y - vyska);
        }
        public double VyskaTrojuhel(double delka)
        {
            return Math.Sqrt(Math.Pow(delka, 2) * 3 / 4);                                           //výška se vrací i separátně pro další výpočty
        }

        public void VytvorObrazec(double x, double y, double vstupniDelka)                  //rekurzivní funkce
        {
            double delka = vstupniDelka;

            SpoctiVrcholy(x, y, delka);
            Polygon triangl = new Polygon()
            {
                Stroke = Brushes.Black,
                Fill = Brushes.AliceBlue,
                StrokeThickness = 1,
            };
            triangl.Points = new PointCollection() { v1, v2, v3 };
            MainWindow.c.Children.Add(triangl);
            if (delka > MainWindow.c.ActualWidth/100)                                                    //rekurzivní funkce pro změnšování a rozmisťování trojúhelníků uvnitř předešlých trojúhelníků
            {
                VytvorObrazec(x, y, delka / 2);                                               //levý vnořený
                VytvorObrazec(x + delka / 2, y, delka / 2);                                   //pravý vnořený
                double vyska = VyskaTrojuhel(delka);
                VytvorObrazec(x + delka / 4, y - vyska / 2, delka / 2);                       //horní vnořený
            }
        }
    }

Klidně kód Kochových křivek vylepši, mě to nevadí.

 
Odpovedať
27.3.2018 16:04
Avatar
Petr Laštovička:31.3.2018 10:53

Trochu jsem to vylepšil:

  • maximální počet úhlů mnohoúhelníků lze nastavit konstantou MaxVrcholu. Maximální počet kroků lze nastavit konstantou MaxKroku.
  • zobrazení jsem urychlil pomocí VisualCollection, DrawingVisual a DrawingContext.
  • po kliknutí na přepínače nebo náhodnou kombinaci se křivka okamžitě překreslí.
  • přidal jsem Slider na počet kroků.
  • přidal jsem ComboBox na zajímavé fraktály.
  • křivka je hezky barevná i při menším počtu kroků.

Stáhnout to lze zde

 
Odpovedať
31.3.2018 10:53
Avatar
Bruno Schwarzbach:2.4.2018 13:31

Díky, na kód se podívám, mám pocit, že se něco přiučím :-)

 
Odpovedať
2.4.2018 13:31
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!