unit punto1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart; function ArcSin (x: double): double; type TForm1 = class(TForm) onda: TChart; Series1: TFastLineSeries; Bseno: TButton; amplitud: TEdit; frecuencia: TEdit; fase: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Bcuadrada: TButton; Btriangular: TButton; Bsierra: TButton; procedure BsenoClick(Sender: TObject); procedure BcuadradaClick(Sender: TObject); procedure BtriangularClick(Sender: TObject); procedure BsierraClick(Sender: TObject); private { Private declarations } public { Public declarations } puntos: array [-360..360] of double; procedure seno; procedure dibujar; procedure cuadro; procedure triangulo; procedure Dsierra; end; var Form1: TForm1; implementation {$R *.dfm} function ArcSin (x: double): double; begin ArcSin := ArcTan(x / Sqrt(1 - Sqr(x)) ); end; procedure Tform1.seno; var a, f, fa: double; cont: integer; begin a:= strtoint(amplitud.text); f:= strtofloat (frecuencia.Text); fa:= strtofloat (fase.text); if ((fa=180) or (fa=270)) then fa:= fa-1; for cont:=-360 to 360 do puntos[cont]:=a*( Sin((f*pi*cont/180)+fa) ); end; procedure Tform1.cuadro; var a, f, fa: double; cont: integer; begin a:= strtoint(amplitud.text); f:= strtofloat (frecuencia.Text); fa:= strtofloat (fase.text); if ((fa=180) or (fa=270)) then fa:= fa-1; for cont:=-360 to 360 do begin puntos[cont]:= a*( Sin((f*pi*cont/180)+fa) ); if puntos[cont]>0 then puntos[cont]:=1*a else puntos[cont]:=-1*a; end; end; procedure Tform1.triangulo; var a, f, fa: double; cont,c: integer; y: double; begin a:= strtoint(amplitud.text); f:= strtofloat (frecuencia.Text); fa:= strtofloat (fase.text); if ((fa=180) or (fa=270)) then fa:= fa-1; fa:= fa + 0.0001; for cont:=-360 to 360 do begin puntos[cont]:= a* ArcSin ( sin ( ((f*pi*cont)/180)+ fa + (pi/180)) ) end end; procedure Tform1.Dsierra; var a, f, fa: double; cont: integer; z: double; begin a:= strtoint(amplitud.text); f:= strtofloat (frecuencia.Text); fa:= strtofloat (fase.text); if ((fa=180) or (fa=270)) then fa:= fa-1; for cont:=-360 to 360 do begin puntos[cont]:= a* arctan( (sin( ((pi*f/180)*cont+fa) ) ) / (cos ((pi*f/180)*cont+fa) ) + ((pi/180))) end end; procedure Tform1.dibujar; begin onda.series[0].clear; onda.series[0].addarray (puntos); end; procedure TForm1.BsenoClick(Sender: TObject); begin seno; dibujar; end; procedure TForm1.BcuadradaClick(Sender: TObject); begin cuadro; dibujar; end; procedure TForm1.BtriangularClick(Sender: TObject); begin triangulo; dibujar; end; procedure TForm1.BsierraClick(Sender: TObject); begin Dsierra; dibujar; end; end.