Algorytm kreślenia spirali
Algorytm kreślenia spirali PDF Drukuj Email
Wpisał doctor   
Niedziela, 11. Maj 2008 15:59
Algorytm kreślenia spirali

Algorytm kreślenia spirali w niniejszej poradzie dotyczy spirali Archimedesa, czyli lewoskrętnej spirali opisanej w układzie biegunowym równaniami:

r = a*fi;
x = r*cos(fi);
y = r*sin(fi);


gdzie:
r - promień spirali
a - stała
fi - kąt obrotu, [deg]

I tak: o tym, czy spirala będzie prawoskrętna czy lewoskrętna decyduje wartość fi.O skoku spirali decyduje stała a.

Na formę kładziemy 1 komponent Timer z palety System.
Ustawiamy jego właściwość Interval na 100.
W pliku Unit1.cpp dołączamy nagłówek
#include <math.h>
Dalej definiujemy zmienne globalne
float fi = 0;
double x, y;
int x0, y0;
float r  = 5;// promien poczatkowy

Zdarzenie OnCreate uzupełniamy:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
x0 = Form1->Width/2 + r;
y0 = Form1->Height/2;
Canvas->MoveTo(x0, y0);
}
Zadaniem tego kodu jest przesunięcie pióra na środek kreślonej spirali.
Zdarzenie OnTimer uzupełniamy kodem:

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
// spirala Archimedesa rysowana we wspolrzednych biegunowych
x = r*cos(fi);
y = r*sin(fi);
// offset przesuniecia

Canvas->LineTo(x+x0, y+y0);

fi+=0.2;// obrot piora: jesli + to spirala prawoskretna, jesli - to lewoskretna
r = 10*fi;// zwiększenie promienia
}

Jako, że funkcje sin i cos są okresowe, nie musimy zerować kąta po każdym okresie.
Oto ofekt naszej pracy.


Zmieniony ( Niedziela, 11. Maj 2008 16:06 )
 
 

Losowy obraz

b13.jpg

Gościmy

Naszą witrynę przegląda teraz 21 gości 
Dzwonki polifoniczne

Grafika i fotografia | cheap calling cards | napełnianie klimatyzacji | wynajem limuzyn | lampy warszawa