Rysowanie wykresu tangensa oraz cotangensa

0

Witam, jako program zaliczeniowy wybrałem sobie rysowanie funkcji jednak mam kłopot z funkcjami tan i ctg. Bardzo prosił bym o pomoc jak to napisać.
Kombinowałem trochę z podstawową własnością tan = sin(x)/cos(x) ale ciągle wyskakuje mi błąd może pomożecie.
Pozdrawiam i dziękuję z góry
Piotrek

 unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i,y:integer;
begin
for i:=0 to form1.Width-40 do
begin
  y:=round(form1.height/2)-round(150*sin(i*2*3.14159/(form1.Width-40)));
  canvas.pixels[i+20,y]:=clblue;
end;
canvas.MoveTo(20,20);
canvas.lineTo(20,form1.Height-20);
canvas.MoveTo(20,round(form1.Height/2));
canvas.lineTo(round(form1.Width)-20,round(form1.Height/2));

canvas.moveto(20,30);
canvas.lineto(25,30);
canvas.lineto(20,20);
canvas.lineto(15,30);
canvas.lineto(20,30);

canvas.moveto(745,255);
canvas.lineto(745, 250);
canvas.lineto(755, 255);
canvas.lineto(745,260);
canvas.lineto(745, 255);

Canvas.TextOut(25, 260, '0');                      // "0"
Canvas.TextOut(195, 260, 'Pi/2');                   // Pi/2
Canvas.TextOut(400, 260, 'Pi');                    // Pi
Canvas.TextOut(550, 260, '(3/2*Pi)');              // (3/2)*Pi
Canvas.TextOut(720, 260, '2*Pi');                  // 2*Pi

end;

procedure TForm1.Button2Click(Sender: TObject);
var
i,y:integer;

begin
for i:=0 to form1.Width-40 do
begin
  y:=round(form1.height/2)-round(150*cos(i*2*3.14159/(form1.Width-40)));
  canvas.pixels[i+20,y]:=clred;
end;
canvas.MoveTo(20,20);
canvas.lineTo(20,form1.Height-20);
canvas.MoveTo(20,round(form1.Height/2));
canvas.lineTo(round(form1.Width)-20,round(form1.Height/2));
canvas.moveto(20,30);
canvas.lineto(25,30);
canvas.lineto(20,20);
canvas.lineto(15,30);
canvas.lineto(20,30);

canvas.moveto(745,255);
canvas.lineto(745, 250);
canvas.lineto(755, 255);
canvas.lineto(745,260);
canvas.lineto(745, 255);
Canvas.TextOut(25, 260, '0');                      // "0"
Canvas.TextOut(195, 260, 'Pi/2');                   // Pi/2
Canvas.TextOut(400, 260, 'Pi');                    // Pi
Canvas.TextOut(550, 260, '(3/2*Pi)');              // (3/2)*Pi
Canvas.TextOut(720, 260, '2*Pi');                  // 2*Pi
end;

procedure TForm1.Button3Click(Sender: TObject);
var
i,y:integer;

begin
for i:=0 to form1.Width-40 do
begin
  y:=round(form1.height/2)-round(150*cos(2*i*2*3.14159/(form1.Width-40)));
  canvas.pixels[i+20,y]:=clgreen;
end;
canvas.MoveTo(20,20);
canvas.lineTo(20,form1.Height-20);
canvas.MoveTo(20,round(form1.Height/2));
canvas.lineTo(round(form1.Width)-20,round(form1.Height/2));
canvas.moveto(20,30);
canvas.lineto(25,30);
canvas.lineto(20,20);
canvas.lineto(15,30);
canvas.lineto(20,30);

canvas.moveto(745,255);
canvas.lineto(745, 250);
canvas.lineto(755, 255);
canvas.lineto(745,260);
canvas.lineto(745, 255);
Canvas.TextOut(25, 260, '0');                      // "0"
Canvas.TextOut(195, 260, 'Pi/2');                   // Pi/2
Canvas.TextOut(400, 260, 'Pi');                    // Pi
Canvas.TextOut(550, 260, '(3/2*Pi)');              // (3/2)*Pi
Canvas.TextOut(720, 260, '2*Pi');                  // 2*Pi


end;
end.
3

dodaj do sekcji uses System.Math, są tam funkcje tan i cot.

Edit:
Dodatkowo zamiast wpisywać ręcznie wartość Pi, możesz użyć funkcji http://4programmers.net/Delphi/Pi

Bloki typu

pepi911 napisał(a):
canvas.MoveTo(20,20);
canvas.lineTo(20,form1.Height-20);
canvas.MoveTo(20,round(form1.Height/2));
canvas.lineTo(round(form1.Width)-20,round(form1.Height/2));

canvas.moveto(20,30);
canvas.lineto(25,30);
canvas.lineto(20,20);
canvas.lineto(15,30);
canvas.lineto(20,30);

canvas.moveto(745,255);
canvas.lineto(745, 250);
canvas.lineto(755, 255);
canvas.lineto(745,260);
canvas.lineto(745, 255);

polecam zamknąć w 'With do' http://4programmers.net/Delphi/With

0

Witam, dziękuję bardzo za odpowiedz. Czy jest mozliwosc aby współrzędne typu pi, pi/2 byly rysowane takze jak wykres zależnie od wielkości okna. ? Jakby wygladal taki kod?

Pozdrawiam

0

O procedurach słyszał? Zacznij od napisania tego kodu po ludzku...

0

Tak, to prawda, czas skasować ten kod i napisać go od nowa, tyle że z głową; Wystarczy napisanie przemyślanej pętli zarówno do obliczenia tangensa/kotangensa i w niej od razu ciągnięcie linii.

0

Witam, dziękuje wszystkim za odpowiedzi.
Program skończony.
Temat do zamknięcia
Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1