Niekwadratowa spirala na tablicy 50x50 - jak to zrobić?

0

Witam, chciałbym zrobić spiralę w tablicy kwadratowej. Tzn, mam np tablicę 50x50 i chciałbym zrobić w niej spiralę (ale UWAGA, spirala nie może być kwadratowa, taką bym sam napisał). Punkty spirali nie muszą korzystać ze wszystkich punktów tablicy. Ba - nie powinny. To ma być rzadka spirala, max 3-4 obroty wokół środka (tj. duże odstępy między linami). Czuję że bez cosinusów, sinusów i innych tangensów może sie nie obyć. Ma ktos jakis pomysl? Pozdrawiam

1

Może jakiś przykład?

0

Hehe to ja oczekuję przykładu :D Nie no jase, proszę, coś takiego chcę wygenerować (mniej wiecej, troche za malo kwadracikow zeby to lepiej wygladalo).

http://speedy.sh/YPFBb/untitled.png

Nie musi to byc idealny wir. To mogą byc polokregi dookola srodka.

1

Rysuj sobie okręgi wokół środka zwiększając co jakis czas promien. Wystartuj z 1, poźniej szybko na dwa i potem jak już chcesz. Zakodzenie tego chyba (?) nie jest problemem, myśle, ze problem mógł sprawiać sam algorytm doboru odpowiednich indeksów tablicy.

3
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

vector<vector<bool> > Tb(50,vector<bool>(50));

int main()
  {
   const double Z=2*M_PI;
   const double A=25/Z;
   const unsigned steps=1000;
   
   for(unsigned i=1;i<=steps;++i)
     {
      double f=Z*i/steps,r=A*f;
      Tb[25+r*sin(f)][25-r*cos(f)]=true;
     }
   for(unsigned y=0;y<50;++y,cout<<endl) for(unsigned x=0;x<50;++x) cout<<" @"[Tb[y][x]]<<' ';
   return 0;
  }

http://ideone.com/1oQHmI

0

Dzieki wielkie. Jutro sprobuje rozkminic zasade dzialania. Dzieki jeszcze raz.

0

Mam problem, jak rozumiem to 25 to jest jakby promień, po podmienieniu danych na swoje mam taki kod:

    points = new P ** [radius*2];

    for(int i=0; i<radius*2; i++) {
        points[i] = new P * [radius*2];
    }

    const double Z = 2*M_PI;
    const double A = radius/Z;
    const unsigned steps = 1000;

    for(unsigned i=1; i<=steps; ++i) {
        double f = Z*i/steps, r = A*f;
        points[(int)(radius + r*sin(f))][(int)(radius - r*cos(f))] = 1;
    }

Niestety, nawet gdy program się skompiluje, to chyba przekraczam zakres tablicy, sam nie wiem, program się krzaczy.

1

Debugier oczywiście ci ufoludki odinstalowali?
Zamienić wpisywanie jedynki do tablicy na wyświetlenie współrzędnych nie potrafisz?

0

Czy spirala lewa, czy prawa? Można to oczywiście rozwiązać bez sinusów - wystarczy sprawdzić sąsiedztwo, sąsiedztwa połączenia z bitami ustawionymi jako wyświetlane. To zapewne wg uczonych Kolegów jest jakiś tam algortym :)

0

@_13th_Dragon
Nie, nie o to chodziło. Kompilator wyrzucił nie ten błąd co trzeba, problem był w mojej dynamicznej tablicy. A co zmodyfikować żeby spirala była "w drugą stronę"?

@MiM
Z chęcią go poznam :)

1

radius + r*cos(f))

0

Wg mnie w teorii, to spirala o polega na dodawaniu współrzędznej archimedesa na współrzędnych liniowej - na tym funkcjonuje informatyka :)

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