Wykres funkcji sinus

Deti

Wiele osób nie wie jak to coś zrobić, zatem od razu zacznę od konkretów.

Robimy najpierw formę wielkości 644 (szerokość) oraz 375 (wysokość). Teraz ustawiamy jeszcze Border Style na „Single”, żeby nie można było tego zmieniać. Następnym krokiem jest wstawienie naszego tzw. miejsca do rysowania, ja użyłem Shape (biały prostokąt wypełniający w całości formę). Gdy już to zrobimy, możemy jechać dalej…

Na samej górze wstawimy dwa przyciski o podpisach odpowiednio: 'Pokaż wykres' oraz 'Rysuj funkcję sinus'. Chyba wiadomo, po co one. Nazwijcie je odpowiednio: 'wykres' oraz 'sinus'.

Teraz w zdarzeniu 'OnCreate' formy piszemy:
 
procedure TForm1.FormCreate(Sender: TObject);
begin
sinus.Enabled:=false;
end;

Następnie klikamy dwa razy na przycisk “wykres” i piszemy:

procedure TForm1.wykresClick(Sender: TObject);
 
begin
wykres.Enabled:=false;
Canvas.Pen.Color := clBlack;
Canvas.Pen.Style := psSolid;
Canvas.Brush.Style := bsClear;
Canvas.Font.Color := clBlue;
 
// uklad wspolrzednych
Canvas.MoveTo(20, 100);   // [ustawienie] góra "y"
Canvas.LineTo(20, 300);   // os "y"
Canvas.MoveTo(20, 200);   // [ustawienie] srodek ukladu
Canvas.LineTo(400, 200);  // os "x"
 
Canvas.TextOut(19, 60, 'Wykres funkcji sinus!');     // tytul
Canvas.TextOut(5, 100, 'y');                         // napis "y"
Canvas.TextOut(407, 200, 'x');                     // napis "x"
Canvas.TextOut(10, 200, '0');                      // "0"
Canvas.TextOut(95, 205, 'Pi/2');                   // Pi/2
Canvas.TextOut(170, 205, 'Pi');                    // Pi
Canvas.TextOut(255, 205, '(3/2*Pi)');              // (3/2)*Pi
Canvas.TextOut(334, 205, '2*Pi');                  // 2*Pi
 
canvas.pen.mode := pmblack;
Canvas.Brush.Color := clRed;
canvas.Polygon([point(400,200),point(390,195),Point(390,205)]);      //strzalka "x"
canvas.Polygon([point(20,100),point(15,110),Point(25,110)]);      //strzalka "y"
sinus.Enabled:=true;
end;

Podobnie z przyciskiem 'sinus':

procedure TForm1.sinusClick(Sender: TObject);
var
x,y:integer;
y2,x2,i:real;
 
begin
sinus.Enabled:=false;
Canvas.Pen.Color := clblue;
Canvas.Pen.Style := psSolid;
Canvas.Brush.Style := bsClear;
canvas.pen.mode := pmblack;
Canvas.Brush.Color := clRed;
 
// wykres sin(x)
 
i:=0.0;
REPEAT
i:=i + 0.02;
x2:=20+i*50;
x:=round(x2);
y2:=200-(sin(i)*50);
y:=round(y2);
Canvas.Pixels[x, y] := clRed;
sleep(100);
UNTIL i>=6.29;
end;

No i gotowe. Jeżeli natomiast chcemy, aby sinusoida pokazała się od razu, wykreślamy wers kodu 'sleep(100);'.

Oczywiście nie jest to profesjonalny wykres, ale za to pełen gotowiec, i powinien działać u każdego !

2 komentarzy

hehehe fajne :DDDDD
podoba mi sie :p

bravo :)

Fajna sinusoida, ale z kropek. W dziale FAQ jest opis jak zrobić ciągłą przy wykorzystaniu lini lub krzywych Beziera.