• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dywan Sierpińskiego

0 głosów
8,670 wizyt
pytanie zadane 7 października 2015 w C i C++ przez muscler Użytkownik (720 p.)
Witam !

Zaczynam przygodę z grafiką w openGL-u i mam pewien problem a mianowicie :

Mam napisać program w języku C który będzie rysował dywan Sierpińskiego. Program ma uwzględniać podaną przez użytkownika liczbę iteracji. Próbowałem już na parę sposobów lecz w ogóle nie mogę dojść do tego jak to podzielić ten większy kwadrat na mniejsze kwadraty itd. Kombinowałem, żeby każdy kwadrat mniejszy osobno 'ustawiać' ale wydaje mi się to zbyt czasochłonne i na dłuższą metę bezsensowne rozwiązanie, musi być coś lepszego!  Dodam, że jestem raczej początkującym w dziedzinie informatyki stąd może nie mogę załapać tego. :)

2 odpowiedzi

+1 głos
odpowiedź 7 października 2015 przez adrian17 Ekspert (323,380 p.)
Prosta rekurencja:

- rysujesz dywan na kwadracie o lewym górnym wierzchołku wierzchołku (0, 0) i długości boku S.

- na każdym z 8 mniejszych kwadratów wywołujesz powyższą metodę z odpowiednio zmienionymi współrzędnymi.

- na jakimś odpowiednio głębokim stopniu rekurencji zamiast kontynuować rysujesz kwadrat o tych współrzędnych.
komentarz 7 października 2015 przez adrian17 Ekspert (323,380 p.)
const int max_glebokosc = 10;

void dywan(int x, int y, int sz, int glebokosc) {
    if(glebokosc > max_glebokosc) {
        rysuj_kwadrat(x, y, sz);
    } else {
        sz /= 3;
        dywan(x,        y,          sz, glebokosc + 1);
        dywan(x+sz,     y,          sz, glebokosc + 1);
        dywan(x+sz+sz,  y,          sz, glebokosc + 1);
        dywan(x,        y+sz,       sz, glebokosc + 1);
        //dywan(x,      y+sz,       sz, glebokosc + 1); // srodek ma byc pusty
        dywan(x+sz+sz,  y+sz,       sz, glebokosc + 1);
        dywan(x,        y+sz+sz,    sz, glebokosc + 1);
        dywan(x+sz,     y+sz+sz,    sz, glebokosc + 1);
        dywan(x+sz+sz,  y+sz+sz,    sz, glebokosc + 1);
    }
}


// gdzies w czesci rysujacej programu

dywan(0, 0, SZ, 0);

 

0 głosów
odpowiedź 4 listopada 2015 przez likoms Nowicjusz (140 p.)

Podobne pytania

0 głosów
0 odpowiedzi 2,615 wizyt
pytanie zadane 7 marca 2016 w Offtop przez Ciri Gaduła (3,380 p.)
+1 głos
2 odpowiedzi 121 wizyt
pytanie zadane 9 października 2020 w C i C++ przez Jakub 0 Pasjonat (23,100 p.)

89,693 zapytań

138,297 odpowiedzi

309,243 komentarzy

59,623 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...