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 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.

spirala Archimedesa
Komentarze
Dodaj nowy Szukaj
+/-
Napisz komentarz
Nick:
E-mail:
 
Strona www:
Tytuł:
UBBCode:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Proszę wpisać kod antyspamowy widoczny na obrazku.

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

Ostatnia aktualizacja: Czwartek, 31. Grudzień 2009 17:04
 
 

Losowy obraz

b13.jpg

Gościmy

Naszą witrynę przegląda teraz 12 gości 




| | | |