Rysowanie spirali Ulama

0

Witam,
czy mógłbym prosić o jakieś wskazówki, jak narysować spiralę Ulama w C?
Albo ogólniej - jak narysować spiralę kwadratową w C?
user image

W załączniku screen jak ma to wyglądać.

0
  1. Ustalasz 4 zmienne ograniczające: Lf, Up, Rt, Dn
  2. Ustalasz kierunek L:
  3. Kolejne kroki robisz w pętle dopóki Up<=Dn oraz Lf<=Rt
  4. Dla kierunku L idziesz od Rt do Lf wzdłuż Dn, po czym zmniejszasz Dn i zmieniasz kierunek na U
  5. Dla kierunku U idziesz od Dn do Up wzdłuż Lf, po czym zwiększasz Lf i zmieniasz kierunek na R
    pozostałe dwa kierunki - sam dasz rady dopisać
0

a mógłbym poprosić o jakąś ciut większą wskazówkę? tak bardziej dla kogoś początkującego :)
dopiero zacząłem zarówno studia jak i pisanie w C++ ;)

0

Ciut więcej to już gotowiec.

0
_13th_Dragon napisał(a):

Ustalasz 4 zmienne ograniczające: Lf, Up, Rt, Dn

  1. Ustalasz kierunek L:
  2. Kolejne kroki robisz w pętle dopóki Up<=Dn oraz Lf<=Rt
  3. Dla kierunku L idziesz od Rt do Lf wzdłuż Dn, po czym zmniejszasz Dn i zmieniasz kierunek na U
  4. Dla kierunku U idziesz od Dn do Up wzdłuż Lf, po czym zwiększasz Lf i zmieniasz kierunek na R
    pozostałe dwa kierunki - sam dasz rady dopisać

@_13th_Dragon Nie jestem autorem tematu, ale chciałem zrobić tą spiralę ulama, tylko pytanie mam takie, jak zrobić aby liczby wpisywał od środka, i potem stopniowo szedł w prawo, górę, lewo itd. Używam Qt.

0

OSTATNNIA_LICZBA=Y*X;
Po czym idź od zewnątrz zmniejszając.

0

Czyli co mam zacząć od wypisania liczby w górnym lewym rogu ?? Tak jak na obrazku "37" ??

0

Zaczynasz nie od rogu tylko od kierunku.

0

jeżeli n będzie parzyste, to zaczynamy rysowanie od lewego górnego rogu.

void parzyste(int **tablica, int n)
{
    int X1=0, X2=n;
    int Y1=1, Y2=n;

    int wartosc = n*n;
    int kierunek = 0;
    int i=0,j=0;

    while(wartosc!=0)
    {
        switch(kierunek%4)
        {
        case 0: //idziemy w prawo
            tablica[i][j]=wartosc;
            wartosc--;
            j++;
            if(j==X2)
            {
                X2--;
                j=X2;
                kierunek++;
                i++;
            }
            break;

        case 1: //w dol
            tablica[i][j]=wartosc;
            wartosc--;
            i++;
            if(i==Y2)
            {
                Y2--;
                i=Y2;
                kierunek++;
                j--;
            }
            break;

        case 2: //teraz w lewo
            tablica[i][j]=wartosc;
            wartosc--;
            j--;
            if(j<X1)
            {
                j=X1;
                X1++;
                kierunek++;
                i--;
            }
            break;

        case 3: //w gore
            tablica[i][j]=wartosc;
            wartosc--;
            i--;
            if(i<Y1)
            {
                i=Y1;
                Y1++;
                kierunek++;
                j++;
            }
            break;
        }
    }
}

W przypadku, gdy n będzie nieparzyste musimy zacząć od dolnego prawego rogu - jak ująć ten przypadek w tym kodzie?

0

Zastanów się trochę, całość da się zapisać w max 10 wierszy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1