|
Algorytm kreślenia spirali |
|
|
|
|
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 współrzednych 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.
|
|
Ostatnia aktualizacja: Czwartek, 31. Grudzień 2009 17:04 |