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
Może jakiś przykład?
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.
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.
#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;
}
Dzieki wielkie. Jutro sprobuje rozkminic zasade dzialania. Dzieki jeszcze raz.
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.
Debugier oczywiście ci ufoludki odinstalowali?
Zamienić wpisywanie jedynki do tablicy na wyświetlenie współrzędnych nie potrafisz?
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 :)
@_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 :)
radius + r*cos(f))
Wg mnie w teorii, to spirala o polega na dodawaniu współrzędznej archimedesa na współrzędnych liniowej - na tym funkcjonuje informatyka :)