Quix Quix Quix Quix

CodeZone   Projektowanie stron PHP WebPage Editor Forum Kontakt

Aktualności

Artykuły

Kursy

Download

Literatura

Linki

Pomoc

Login:

Hasło:

Literatura

Nowości

Aktualizacja 27-01-2007

Rzutowanie z 3d na płaszczyznę 27-01-2007

Obrót w 2d 27-01-2007

Szyfrowanie hasłem 27-01-2007

Wykresy funkcji 27-01-2007

Zamiana obrazków 19-08-2006

Lista 03-08-2006

Hello World 2.0 03-08-2006

Automatyczne wysyłanie formularza 03-08-2006

Animowanie wyświetlania tekstu 03-08-2006

PHP WebPage Editor

Najnowsza wersja: 3.2
Aktualizacja: 27.01.2007

Ściągnij

Ostatnio na forum

php.exe 18-02-2010

Kilka propozycji 24-04-2009

Konstruktor i zwracanie wartości 22-03-2009

formularz 29-06-2008

formularz 29-06-2008

Premiera PHP WebPage Editora 3.0 20-08-2007

utf-8 22-06-2007

Mapa odsyłaczy 20-06-2007

Możliwość zapisywania przez FTP 20-06-2007

problem 25-04-2007

->CodeZone->Artykuły->Algorytmy->Wykresy funkcji

Wykresy funkcji

27-01-2007

Wbrew pozorom narysowanie wykresu jakiejś funkcji nie jest specjalnie trudne- mając funkcję wystarczy wyliczać wartości dla kolejnych argumentów i wyświetlać w postaci graficznej wynik tych obliczeń:
krok = 1
x = dolna_granica_przedziału
while (x<=gorna_granica_przedziału) do begin
  y:=2*x+1;
 canvas.pixels[x+width div 2,-y+height div 2]:=$00FFFFFF;
  x:=x+krok;
end;

powyższą pętle wykonujemy w granicach pewnego przedziału w którym chcemy zbadać wybraną funkcję. W tym przypadku mamy prostą funkcję f(x)= 2x + 1 dla której wyliczamy kolejne wartości. Następnie wyświetlamy wyliczony punkt przesunięty na ekranie o połowę szerokości i wysokości obszaru rysowania aby punkt (0,0) znajdował się na środku. Warto zwrócić uwagę że wartość jest rysowana ze znakiem ujemnym – jest to konieczne ponieważ ekran komputera posiada oś y skierowaną odwrotnie niż jest to przyjęte w matematyce.

Taki wykres można przeskalować, wówczas wystarczy zmienić linijkę rysującą piksel:
canvas.pixels[skalaX*x+400,-y*skalaY+400]:=$00FFFFFF;

Zastosowanie powyższej metody przy kroku równym 1 spowoduje narysowanie wykresu punktowego. Jeżeli chcemy osiągnąć wykres liniowy należy skorzystać z metody lineto.
Przed pętlą ustawiamy punkt od którego zaczynamy rysowanie:
canvas.moveto(dolna_granica_przedzialu+width div 2,-y+height div 2);

a w pętli zamiast canvas.pixels[...,...]:
canvas.lineto(x+width div 2,-y+height div 2);


Przy takim rozwiązaniu okazuje się jednak, że przy większych powiększeniach i innego rodzaju funkcjach – np. parabolach wykres jest połamany – wynika to z przyjętego kroku, aby tego uniknąć należy przyjmować krok dostatecznie mały, aby nie było tego widać. Ponieważ szerokość pola do rysowania wynosi width, należy przyjąć taki krok aby w badanym przedziale width razy wyliczać wartości funkcji:
krok = (gorna_granica_przedzialu – dolna_granica_przedzialu) / width;

Komentarze

Gość

17:36 09-02-2007

ok

Powered by Quix CMS

0.0023 0.0080 0.0083 0.0116 0.0119 0.0212