Problema con un PaintBox
Saludos:
Tengo un problema con un objeto de tipo PaintBox. Resulta que lo utilizo para pintar cosas sobre el, pero si abro por ejemplo otra ventana o incluso si minimizo y maximizo el programa, me desaparece lo que habia pintado. Se trata de alguna propiedad del objeto?
Gracias por las contestaciones.
Tengo un problema con un objeto de tipo PaintBox. Resulta que lo utilizo para pintar cosas sobre el, pero si abro por ejemplo otra ventana o incluso si minimizo y maximizo el programa, me desaparece lo que habia pintado. Se trata de alguna propiedad del objeto?
Gracias por las contestaciones.
wenas, yo tenÃa el mismo problema y casi me vuelvo loco con el, la solución es muy sencilla, en lugar de utilizar el objeto PaintBox, utiliza el objeto TImage, funciona igual y no sucede el problema. Deeee nada
Bueno es muy sencillo solo
unit Figuras;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ColorGrd, ExtCtrls,Math, ComCtrls;
type
ArregloR = array of real;
TfrmPrincipal = class(TForm)
Panel2D: TPanel;
Lienzo: TPanel;
PaintBox1: TPaintBox;
ColorGrid1: TColorGrid;
btnLimpiar: TButton;
MainMenu1: TMainMenu;
Graficos3d1: TMenuItem;
Fractales1: TMenuItem;
Graficos3d2: TMenuItem;
LaboratoriosVirtuales1: TMenuItem;
Fondo1: TMenuItem;
Salir1: TMenuItem;
gbxGraficosDinamicos: TGroupBox;
btnSegmentoDinam: TButton;
StatusBar1: TStatusBar;
btnCircunferenciaDinam: TButton;
btnRectanguloDinam: TButton;
cbxTipo: TComboBox;
btnCurva: TButton;
btnPoligono: TButton;
edtNumLados: TEdit;
btnCurvaAjuste: TButton;
btnCurvaBezier: TButton;
btnTapete: TButton;
cbxTipoTapete: TComboBox;
btnCurvaLagrange: TButton;
gbxBanderas: TGroupBox;
btnBandera: TButton;
btnBanderaDegradada: TButton;
btnSalir: TButton;
cbxTipoPaleta: TComboBox;
lblTipoPaleta: TLabel;
GrficosEstticos1: TMenuItem;
mnuVector: TMenuItem;
mnuSegmento: TMenuItem;
mnuCircunferencia: TMenuItem;
mnuRectangulo: TMenuItem;
mnuTriangulo: TMenuItem;
mnuArbol: TMenuItem;
mnuEstrella: TMenuItem;
clgColorFondo: TColorGrid;
gbxColorFondo: TGroupBox;
mnuCubo: TMenuItem;
mnuReloj: TMenuItem;
mnuElipse: TMenuItem;
btnElipseDin: TButton;
btnCurvaRelleno: TButton;
procedure Salir1Click(Sender: TObject);
procedure btnVectorClick(Sender: TObject);
procedure btnSegmentoClick(Sender: TObject);
procedure btnCircunferenciaClick(Sender: TObject);
procedure btnRectanguloClick(Sender: TObject);
procedure btnSegmentoDinamClick(Sender: TObject);
procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure btnCircunferenciaDinamClick(Sender: TObject);
procedure btnRectanguloDinamClick(Sender: TObject);
procedure btnCurvaClick(Sender: TObject);
procedure btnPoligonoClick(Sender: TObject);
procedure btnCurvaAjusteClick(Sender: TObject);
procedure btnLimpiarClick(Sender: TObject);
procedure marca(sx,sy:integer);
procedure btnCurvaBezierClick(Sender: TObject);
procedure btnTapeteClick(Sender: TObject);
procedure btnCurvaLagrangeClick(Sender: TObject);
procedure btnSalirClick(Sender: TObject);
procedure btnBanderaClick(Sender: TObject);
procedure btnBanderaDegradadaClick(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure btnPaletaClick(Sender: TObject);
procedure btnFractalClick(Sender: TObject);
procedure btnArbolClick(Sender: TObject);
procedure mnuVectorClick(Sender: TObject);
procedure mnuSegmentoClick(Sender: TObject);
procedure mnuCircunferenciaClick(Sender: TObject);
procedure mnuRectanguloClick(Sender: TObject);
procedure Arbol1Click(Sender: TObject);
procedure Estrella1Click(Sender: TObject);
procedure mnuTrianguloClick(Sender: TObject);
procedure mnuArbolClick(Sender: TObject);
procedure mnuEstrellaClick(Sender: TObject);
procedure ColorGrid1Click(Sender: TObject);
procedure Fondo1Click(Sender: TObject);
procedure mnuCuboClick(Sender: TObject);
procedure mnuRelojClick(Sender: TObject);
procedure btnElipseDinClick(Sender: TObject);
procedure mnuElipseClick(Sender: TObject);
procedure btnCurvaRellenoClick(Sender: TObject);
procedure btnSegmentoDegradadoClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//clase libreria Gráfica
TLibreriaG = class
constructor create();
destructor destroy();
procedure pantalla(x,y:real;var Sx,Sy:integer);
procedure real1(Sx,Sy:integer;var x,y:real);
end;
//clase vector
TVector = class(TLibreriaG)
xo,yo:real;
color0:TColor;
constructor create(nxo,nyo:real;ncolor:TColor);
procedure encender();virtual;
procedure apagar();virtual;
end;
//clase Segmento
TSegmento = class(TVector)
xf,yf:real;
constructor create(nxo,nyo,nxf,nyf:real);
procedure encender();override;
end;
//clase circunferencia
TCircunferencia = class(TVector)
radio:real;
constructor create(nxo,nyo,nradio:real);
destructor destroy();
procedure encender();override;
end;
//clase Rectangulo
TRectangulo = class (TSegmento)
constructor create(nxo,nyo,nxf,nyf:real);
destructor destroy();
procedure encender();override;
end;
//clase Curva vectorial
TCurvaV = class(TCircunferencia)
private
tipo:word;
constructor create(nxo,nyo,nr:real);
destructor destroy();
procedure encender();override;
end;
//clase Poligono
TPoligono = class(TCircunferencia)
nlados:word;
constructor create(nxo,nyo,nradio:real;nl:word);
destructor destroy();
procedure encender();override;
end;
//clase Curva de ajuste
TCurvaA = class(TCurvaV)
NDatos:word;
Vx,Vy:ArregloR;
constructor create(nNDatos:word);
destructor destroy();
function lagrange(x:real):real;
procedure bezier(t:real;var Bx,By:real);
function spline(x:real):real;
procedure encender();override;
end;
//clase Tapete
TTapete = class(TCurvaV)
constructor create(ntipo:word);
destructor destroy();
procedure encender();override;
procedure encenderpaleta();
end;
//clase Figuras
TFiguras = class(TList)
constructor create();
destructor destroy();
procedure trazar();
end;
//clase fractal
TFractal = class(TSegmento)
Xm,Ym:real;
constructor create(nXo,nYo,nXf,nYf:real);
destructor destroy();
procedure sierpinsky();
end;
TFractal2= class(TCurvaV)
alfa,beta:real;
constructor create(nXo,nYo,nR:real);
destructor destroy;
procedure arbol;
procedure estrella;
end;
TElipse = class(TCircunferencia)
radio2:real;
constructor create(nxo,nyo,nradio,nradio2:real);
procedure encender;
destructor destroy;
end;
const
Sxmin=0; Sxmax=700;
Symin=0; Symax=360;
Xmin=-35; Xmax=35;
Ymin=-18; Ymax=18;
var
frmPrincipal: TfrmPrincipal;
bandera:word;
base:TLibreriaG;
Pxi,Pyi,Pxf,Pyf:real;
IndexA:word;
Ax,Ay:ArregloR;
Paleta0:array[0..9] of integer;
Paleta1:array[0..9] of integer;
LFiguras:TFiguras;
implementation
{$R *.dfm}
procedure TfrmPrincipal.Salir1Click(Sender: TObject);
begin
application.Terminate;
end;
{ TLibreriaG }
constructor TLibreriaG.create;
begin
end;
destructor TLibreriaG.destroy;
begin
end;
procedure TLibreriaG.pantalla(x, y: real; var Sx, Sy: integer);
begin
Sx:= Trunc((((Sxmin-Sxmax)/(Xmin-Xmax))*(X-Xmax)))+Sxmax;
Sy:= Trunc((((Symin-Symax)/(Ymax-Ymin))*(Y-Ymax)))+Symin;
end;
procedure TLibreriaG.real1(Sx, Sy: integer; var x, y: real);
begin
x:= ((((Sx-Sxmax)*(Xmin-Xmax))/(Sxmin-Sxmax)))+Xmax;
y:= ((((Sy-Symin)*(Ymax-Ymin))/(Symin-Symax)))+Ymax;
end;
{ TVector }
procedure TVector.apagar;
begin
color0:=frmPrincipal.Lienzo.Color;
encender();
end;
constructor TVector.create(nxo, nyo: real; ncolor: TColor);
begin
xo:=nxo;
yo:=nyo;
color0:=ncolor;
end;
procedure TVector.encender;
var
sx,sy:integer;
begin
Pantalla(xo,yo,sx,sy);
frmPrincipal.PaintBox1.Canvas.Pixels[sx,sy]:=color0;
end;
procedure TfrmPrincipal.btnVectorClick(Sender: TObject);
var
p:TVector;
begin
p:=TVector.create(-17.5,9,20);
p.color0:=ColorGrid1.ForegroundColor;
p.encender;
end;
{ TSegmento }
constructor TSegmento.create(nxo, nyo, nxf, nyf: real);
begin
xo:=nxo;
yo:=nyo;
xf:=nxf;
yf:=nyf;
end;
procedure TSegmento.encender;
var
v:TVector;
t,dt:real;
begin
v:=TVector.create(0,0,color0);
t:=0;
dt:=0.001;
repeat
v.xo:=xo*(1-t)+xf*(t);
v.yo:=yo*(1-t)+yf*(t);
//v.color0:=RGB(trunc(125*t),trunc(-125*(t-1)),0);
v.encender;
t:=t+dt;
until (t>=1);
v.destroy;
end;
procedure TfrmPrincipal.btnSegmentoClick(Sender: TObject);
var
s:TSegmento;
begin
s:=TSegmento.create(-30,15,20,-15);
s.color0:=ColorGrid1.ForegroundColor;
s.encender;
sleep(3000);
s.apagar;
end;
{ TCircunferencia }
constructor TCircunferencia.create(nxo, nyo, nradio: real);
begin
xo:=nxo;
yo:=nyo;
radio:=nradio;
end;
destructor TCircunferencia.destroy;
begin
end;
procedure TCircunferencia.encender;
var
v:TVector;
t,dt:real;
begin
v:=TVector.create(0,0,color0);
t:=-pi;
dt:=0.001;
repeat
v.xo:=xo+radio*cos(t);
v.yo:=yo+radio*sin(t);
v.encender;
t:=t+dt;
until (t >= pi);
v.destroy;
end;
procedure TfrmPrincipal.btnCircunferenciaClick(Sender: TObject);
var
c:TCircunferencia;
begin
c:=TCircunferencia.create(10,5,8.5);
c.color0:=ColorGrid1.ForegroundColor;
c.encender;
sleep(1000);
c.apagar;
end;
{ TRectangulo }
constructor TRectangulo.create(nxo, nyo, nxf, nyf: real);
begin
xo:=nxo;
yo:=nyo;
xf:=nxf;
yf:=nyf;
end;
destructor TRectangulo.destroy;
begin
end;
procedure TRectangulo.encender;
var
s:TSegmento;
begin
s:=TSegmento.create(0,0,0,0);
s.xo:=xo; s.xf:=xf;
s.yo:=yo; s.yf:=yo;
s.encender;
s.xo:=xf; s.xf:=xf;
s.yo:=yo; s.yf:=yf;
s.encender;
s.xo:=xf; s.xf:=xo;
s.yo:=yf; s.yf:=yf;
s.encender;
s.xo:=xo; s.xf:=xo;
s.yo:=yf; s.yf:=yo;
s.encender;
s.destroy;
end;
procedure TfrmPrincipal.btnRectanguloClick(Sender: TObject);
var
r:TRectangulo;
begin
r:=TRectangulo.create(-30,15,20,-15);
r.color0:=ColorGrid1.ForegroundColor;
r.encender;
end;
procedure TfrmPrincipal.btnSegmentoDinamClick(Sender: TObject);
begin
bandera:=1;
StatusBar1.Panels[2].Text:='Segmentos';
end;
procedure TfrmPrincipal.PaintBox1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var rx,ry:real;
begin
base.real1(X,Y,rx,ry);
StatusBar1.Panels[0].Text:=FloatToStr(rx);
StatusBar1.Panels[1].Text:=FloatToStr(ry);
end;
procedure TfrmPrincipal.PaintBox1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
s:TSegmento;
c:TCircunferencia;
r:TRectangulo;
cv:TCurvaV;
p:TPoligono;
d,d2,i:real;
numlados:word;
e:TElipse;
begin
base.real1(X,Y,Pxf,Pyf);
d:=sqrt(sqr(Pxi-Pxf)+sqr(Pyi-Pyf));
d2:=(Pxi-PXf)+(Pyi-PYf);
case bandera of
1:
begin
s:=TSegmento.create(Pxi,Pyi,Pxf,Pyf);
s.color0:=ColorGrid1.ForegroundColor;
s.encender;
LFiguras.Add(s);
end;
2:
begin
c:=TCircunferencia.create(Pxi,Pyi,d);
c.color0:=ColorGrid1.ForegroundColor;
c.encender;
LFiguras.Add(c);
end;
3:
begin
r:=TRectangulo.create(Pxi,Pyi,Pxf,Pyf);
r.color0:=ColorGrid1.ForegroundColor;
r.encender;
LFiguras.Add(r);
end;
4:
begin
cv:=TCurvaV.create(Pxi,Pyi,d);
cv.tipo:=frmPrincipal.cbxTipo.ItemIndex;
cv.color0:=ColorGrid1.ForegroundColor;
cv.encender;
LFiguras.Add(cv);
end;
5:
begin
numlados:=StrToInt(frmPrincipal.edtNumLados.Text);
p:=TPoligono.create(Pxi,Pyi,d,numlados);
p.color0:=ColorGrid1.ForegroundColor;
p.encender;
LFiguras.Add(p);
end;
6:
begin
e:=TElipse.create(pxi,pyf,Abs(pxf-pxi),abs(pyi-pyf));
e.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
e.encender;
e.destroy;
end;
7:
begin
cv:=TCurvaV.create(Pxi,Pyi,d);
cv.tipo:=2;
cv.color0:=ColorGrid1.ForegroundColor;
cv.encender;
LFiguras.Add(cv);
i:=0;
while i<d do
begin
cv:=TCurvaV.create(Pxi,Pyi,i);
cv.tipo:=2;
cv.color0:=ColorGrid1.ForegroundColor;
cv.encender;
i:=i+0.05;
end;
end;
end;
end;
procedure TfrmPrincipal.PaintBox1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
base.real1(X,Y,Pxi,Pyi);
inc(IndexA);
setLength(Ax,IndexA);
setLength(Ay,IndexA);
Ax[IndexA-1]:=Pxi;
Ay[IndexA-1]:=Pyi;
marca(X,Y);
end;
procedure TfrmPrincipal.FormCreate(Sender: TObject);
var i:integer;
begin
IndexA:=0;
Paleta0[0]:=clBlack;
Paleta0[1]:=clBlue;
Paleta0[2]:=clRed;
Paleta0[3]:=clGreen;
Paleta0[4]:=clYellow;
Paleta0[5]:=clNavy;
Paleta0[6]:=clLime;
Paleta0[7]:=clMaroon;
Paleta0[8]:=clAqua;
Paleta0[9]:=clWhite;
Lfiguras:=TFiguras.create;
for i:=0 to 9 do
Paleta1[i]:=RGB(trunc((255*i)/9),trunc((255*i)/9),255);
end;
procedure TfrmPrincipal.btnCircunferenciaDinamClick(Sender: TObject);
begin
bandera:=2;
StatusBar1.Panels[2].Text:='Circunferencias';
end;
procedure TfrmPrincipal.btnRectanguloDinamClick(Sender: TObject);
begin
bandera:=3;
StatusBar1.Panels[2].Text:='Rectangulos';
end;
{ TCurvaV }
constructor TCurvaV.create(nxo, nyo, nr: real);
begin
xo:=nxo;
yo:=nyo;
radio:=nr;
end;
destructor TCurvaV.destroy;
begin
end;
procedure TCurvaV.encender;
var
v:TVector;
t,dt:real;
begin
v:=TVector.create(0,0,color0);
dt:=0.001;
case tipo of
0:
begin
t:=0;
repeat
v.xo:=xo+radio*(cos(3*t));
v.yo:=yo+radio*(sin(2*t));
v.encender;
t:=t+dt;
until t >= (2*pi);
v.destroy;
end;
1:
begin
t:=0;
repeat
v.xo:=xo+radio*(power(cos(t),3));
v.yo:=yo+radio*(power(sin(t),3));
v.encender;
t:=t+dt;
until t >= (2*pi);
end;
2:
begin
t:=0;
repeat
v.xo:=Xo+radio*(0.7*cos(4*t)*cos(t));
v.yo:=Yo+radio*(0.7*cos(4*t)*sin(t));
v.encender;
t:=t+dt;
until t >= (2*pi);
v.destroy;
end;
3:
begin
t:=0;
repeat
v.xo:=Xo+radio*((6*cos(t)-cos(6*t))/4);
v.yo:=Yo+radio*((6*sin(t)-sin(6*t))/4);
v.encender;
t:=t+dt;
until t > (2*pi);
v.destroy;
end;
end;
end;
procedure TfrmPrincipal.btnCurvaClick(Sender: TObject);
begin
if (cbxTipo.Text='Tipo Curva')then
Application.MessageBox('Seleccione el tipo de curva','Error',0)
else
StatusBar1.Panels[2].Text:='Curvas';
bandera:=4;
end;
{ TPoligono }
constructor TPoligono.create(nxo, nyo, nradio: real; nl: word);
begin
xo:=nxo;
yo:=nyo;
radio:=nradio;
nlados:=nl;
end;
destructor TPoligono.destroy;
begin
end;
procedure TPoligono.encender;
var
s:TSegmento;
alfa,beta:real;
begin
s:=TSegmento.create(0,0,0,0);
alfa:=2*pi/nlados;
beta:=pi/2;
repeat
s.xo:=xo+radio*cos(beta);
s.yo:=yo+radio*sin(beta);
s.xf:=xo+radio*cos(beta+alfa);
s.yf:=yo+radio*sin(beta+alfa);
// s.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
s.encender;
beta:=beta+alfa;
until beta >= ((5*pi)/2);
s.destroy;
end;
procedure TfrmPrincipal.btnPoligonoClick(Sender: TObject);
begin
if( edtNumLados.Text = '') then
Application.MessageBox('Ingrese el numero de lados','Error',0)
else
StatusBar1.Panels[2].Text:='Poligonos';
bandera:=5;
end;
{ TCurvaA }
procedure TCurvaA.bezier(t: real; var Bx, By: real);
var
Sx,Sy:real;
i:integer;
function fact(n:integer):longint;
begin
if ((n=0)or(n=1))then
fact:=1
else
fact:=fact(n-1)*n;
end;
begin
Sx:=0;Sy:=0;
for i:=0 to NDatos do
begin
Sx:=Sx+(Vx[i]*(fact(NDatos)/(fact(i)*fact(NDatos-i)))*Power(t,i)*Power(1-t,NDatos-i));
Sy:=Sy+(Vy[i]*(fact(NDatos)/(fact(i)*fact(NDatos-i)))*Power(t,i)*Power(1-t,NDatos-i));
end;
Bx:=Sx;
By:=Sy;
end;
constructor TCurvaA.create(nNDatos: word);
begin
NDatos:=nNDatos;
end;
destructor TCurvaA.destroy;
begin
end;
procedure TCurvaA.encender;
var
v:TVector;
s:TSegmento;
t,dt,wx,wy:real;
begin
v:=TVector.create(0,0,color0);
case tipo of
0:
begin
s:=TSegmento.create(0,0,0,0);
end;
1: //lagrange
begin
t:=Vx[0];
dt:=0.001;
repeat
v.xo:=t;
v.yo:=lagrange(t);
v.encender;
t:=t+dt;
until t >= Vx[NDatos];
v.destroy;
end;
2:
begin
t:=0;
dt:=0.001;
repeat
bezier(t,wx,wy);
v.xo:=wx;
v.yo:=wy;
v.encender;
t:=t+dt;
until t>=1;
v.destroy;
end;
end;
end;
function TCurvaA.lagrange(x: real): real;
var
s,p:real;
i,j:word;
begin
s:=0;
for i:=0 to NDatos do
begin
p:=1;
for j:=0 to NDatos do
begin
if (Vx[i]<>Vx[j]) then
p:=p*((x-Vx[j])/(Vx[i]-Vx[j]));
end;
s:=s+Vy[i]*p;
end;
lagrange:=s;
end;
function TCurvaA.spline(x: real): real;
begin
end;
procedure TfrmPrincipal.btnCurvaAjusteClick(Sender: TObject);
var
s:TSegmento;
i:word;
begin
s:=TSegmento.create(Pxi,Pyi,Pxf,Pyf);
for i:=0 to IndexA-2 do
begin
s.xo:=Ax[i];
s.yo:=Ay[i];
s.xf:=Ax[i+1];
s.yf:=Ay[i+1];
s.color0:=ColorGrid1.ForegroundColor;
s.encender;
LFiguras.Add(s);
end;
end;
procedure TfrmPrincipal.btnLimpiarClick(Sender: TObject);
begin
LFiguras.Clear;
PaintBox1.Repaint;
IndexA:=0;
end;
procedure TfrmPrincipal.marca(sx, sy: integer);
begin
frmPrincipal.PaintBox1.Canvas.Pixels[sx,sy]:=clblue;
frmPrincipal.PaintBox1.Canvas.Pixels[sx+1,sy]:=clblue;
frmPrincipal.PaintBox1.Canvas.Pixels[sx-1,sy]:=clblue;
frmPrincipal.PaintBox1.Canvas.Pixels[sx,sy+1]:=clblue;
frmPrincipal.PaintBox1.Canvas.Pixels[sx,sy-1]:=clblue;
end;
procedure TfrmPrincipal.btnCurvaBezierClick(Sender: TObject);
var
cb:TCurvaA;
begin
cb:=TCurvaA.create(IndexA-1);
cb.Vx:=Ax;
cb.Vy:=Ay;
cb.tipo:=2;
cb.color0:=ColorGrid1.ForegroundColor;
cb.encender;
LFiguras.Add(cb);
end;
{ TTapete }
constructor TTapete.create(ntipo: word);
begin
tipo:=ntipo;
end;
destructor TTapete.destroy;
begin
end;
procedure TTapete.encender;
var
i,j:integer;
aux:real;
begin
begin
case tipo of
0:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=((i*i)*(j*j)) mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
1:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(sin(i))*9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
2:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=((i*i*i)*(j*j*j)) mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
3:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(cos(i)+cos(j)) ;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
4:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(tan(i)+tan(j));
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
5:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(sin(i)*sin(j))*9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
6:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc(PI*i*sqrt(j))mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
7:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i*25)* tan (j*PI*PI))mod 30;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
8:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc(sqrt((378*i)/9))mod 30 + (sqrt((7580*j)/30)+trunc(pi*i*sqrt(j))mod 30);
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
9:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i*25)*tan(j*pi*pi))mod 30;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
10:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i+j)/10)mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
end;
end;
end;
procedure TTapete.encenderpaleta;
var
i,j:integer;
aux:real;
begin
begin
case tipo of
0:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=((i*i)*(j*j)) mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
1:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(sin(i))*9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
2:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=((i*i*i)*(j*j*j)) mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
3:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(cos(i)+cos(j)) ;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
4:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(tan(i)+tan(j));
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
5:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(sin(i)*sin(j))*9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
6:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc(PI*i*sqrt(j))mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
7:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i*25)* tan (j*PI*PI))mod 30;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
8:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc(sqrt((378*i)/9))mod 30 + (sqrt((7580*j)/30)+trunc(pi*i*sqrt(j))mod 30);
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
9:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i*25)*tan(j*pi*pi))mod 30;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
10:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i+j)/10)mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
end;
end;
end;
procedure TfrmPrincipal.btnTapeteClick(Sender: TObject);
var
t,tp:TTapete;
tipo:word;
begin
if(cbxTipoPaleta.Text = 'Tipo Paleta')and (cbxTipoTapete.Text='Tipo Tapete')then
Application.MessageBox('Seleccione el tipo de paleta','Error',0)
else
begin
if (cbxTipoPaleta.Text='Paleta 0')then
if (cbxTipoTapete.Text <> 'Tipo Tapete') then
begin
tipo:=cbxTipoTapete.ItemIndex;
t:=TTapete.create(tipo);
t.encender;
LFiguras.Add(t);
end
else
Application.MessageBox('Seleccione el tipo de tapete','Error',0)
else
if(cbxTipoPaleta.Text='Paleta 1')then
if (cbxTipoTapete.Text <> 'Tipo Tapete') then
begin
tipo:=cbxTipoTapete.ItemIndex;
tp:=TTapete.create(tipo);
tp.encenderPaleta;
LFiguras.Add(tp);
end
else
Application.MessageBox('Seleccione el tipo de tapete','Error',0)
end;
end;
procedure TfrmPrincipal.btnCurvaLagrangeClick(Sender: TObject);
var
cl:TCurvaA;
begin
cl:=TCurvaA.create(IndexA-1);
cl.Vx:=Ax;
cl.Vy:=Ay;
cl.tipo:=1;
cl.color0:=ColorGrid1.ForegroundColor;
cl.encender;
LFiguras.Add(cl);
end;
procedure TfrmPrincipal.btnSalirClick(Sender: TObject);
begin
application.Terminate;
end;
procedure TfrmPrincipal.btnBanderaClick(Sender: TObject);
var
i,j:integer;
begin
for i:=0 to 700 do
begin
for j:=0 to 120 do
PaintBox1.Canvas.Pixels[i,j] :=RGB(0,125,0) ;
for j:=120 to 240 do
PaintBox1.Canvas.Pixels[i,j] := RGB(255,255,255);
for j:=240 to 360 do
PaintBox1.Canvas.Pixels[i,j] := RGB(62,124,230);
end;
end;
procedure TfrmPrincipal.btnBanderaDegradadaClick(Sender: TObject);
var
i,j:integer;
begin
for i:=0 to 700 do
begin
for j:=0 to 180 do
begin
PaintBox1.Canvas.Pixels[i,j] := RGB(Trunc(1.417*(j)), trunc(-0.69*(j-180)+1.417*(j)), Trunc(1.417*(j) ));
end;
for j:=180 to 360 do
begin
PaintBox1.Canvas.Pixels[i,j] := RGB(Trunc(-1.417*(j-360)+0.344*(j-180)),trunc(-1.417*(j-360)+0.68*(j-180)), Trunc(-1.417*(j-360)+1.27*(j-180)) );
end;
end;
end;
{ TFiguras }
constructor TFiguras.create;
begin
end;
destructor TFiguras.destroy;
begin
end;
procedure TFiguras.trazar;
var
i:integer;
begin
for i:=0 to Count-1 do //count es atributo de la clase TList
TVector(Items[i]).encender;
end;
//evento q se ejecuta automaticamente cuando el paintbox aparece
procedure TfrmPrincipal.PaintBox1Paint(Sender: TObject);
begin
LFiguras.trazar();
end;
procedure TfrmPrincipal.btnPaletaClick(Sender: TObject);
var
tp:TTapete;
tipo:word;
begin
if (cbxTipoPaleta.Text='Tipo Paleta')then
Application.MessageBox('Seleccione un tipo de Tapete','Error',0)
else
begin
bandera:=8;
tipo:=cbxTipoPaleta.ItemIndex;
tp:=TTapete.create(tipo);
tp.encenderpaleta;
LFiguras.Add(tp);
end;
end;
{ TFractal }
constructor TFractal.create(nXo, nYo, nXf, nYf: real);
begin
Xo:=nXo;
Yo:=nYo;
Xf:=nXf;
Yf:=nYf;
end;
destructor TFractal.destroy;
begin
end;
procedure TFractal.sierpinsky;
var
s:TSegmento;
Tx,Ty,Mx,My,Rx,Ry,aux,pTx,pTy,pMx,pMy,pRx,pRy,pXo,pYo,pXf,pYf,PXm,PYm:real;
begin
s:=TSegmento.create(0,0,0,0);
aux:=abs(Xo-Xf)+abs(Yo-Yf);
if ( aux > 1.5 ) then
begin
Tx:=(Xo+Xm)/2;
Ty:=(Yo+Ym)/2;
Mx:=(Xo+Xf)/2;
My:=(Yo+Yf)/2;
Rx:=(Xm+Xf)/2;
Ry:=(Ym+Yf)/2;
pTx:=Tx;
pTy:=Ty;
pMx:=Mx;
pMy:=My;
pRx:=Rx;
pRy:=Ry;
pXo:=Xo;
pYo:=Yo;
pXf:=Xf;
pYf:=Yf;
pXm:=Xm;
pYm:=Ym;
s.xo:=Tx;
s.yo:=Ty;
s.xf:=Mx;
s.yf:=My;
s.encender;
s.xo:=Rx;
s.yo:=Ry;
s.encender;
s.xf:=Tx;
s.yf:=Ty;
s.encender;
Xo:=pMx;
Yo:=pMy;
Xm:=Rx;
Ym:=Ry;
sierpinsky;
Xo:=pTx;
Yo:=pTy;
Xf:=pRx;
Yf:=pRy;
Xm:=pXm;
Ym:=pYm;
sierpinsky;
Xo:=pXo;
Yo:=pYo;
Xm:=pTx;
Ym:=pTy;
Xf:=pXm;
Yf:=pYm;
sierpinsky;
Xo:=pXo;
Yo:=pYo;
Xf:=pMx;
Yf:=pMy;
Xm:=pTx;
Ym:=pTy;
sierpinsky;
end;
end;
procedure TfrmPrincipal.btnFractalClick(Sender: TObject);
var
s:TSegmento;
sk:TFractal;
begin
s:=TSegmento.create(-15,-10,15,-10);
s.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
s.encender;
s.xo:=0;
s.yo:=15;
s.encender;
s.xf:=-15;
s.yf:=-10;
s.encender;
sk:=TFractal.create(0,15,15,-10);
sk.Xm:=-15;
sk.Ym:=-10;
sk.sierpinsky;
s.destroy;
LFiguras.trazar;
end;
{ TFractal2 }
procedure TFractal2.arbol;
var
s:TSegmento;
Fradio,Falfa:real;fXf,fYf:real;
begin
s:=TSegmento.create(Xo,Yo,1,1);
Falfa:=alfa;
Fradio:=radio;
if (radio > 0.1 ) then
begin
s.color0:=RGB(trunc(-32.27*(radio-8)),255,trunc(-32.27*(radio-8)));
s.xf:=Xo+radio*cos(alfa);
s.yf:=Yo+radio*sin(alfa);
s.encender;
fXf:=s.xf;
fYf:=s.yf;
Xo:=s.xf;
Yo:=s.yf;
alfa:=Falfa-beta;
radio:=Fradio*0.5;
arbol;
Xo:=s.xf;
Yo:=s.yf;
alfa:=Falfa;
radio:=Fradio*0.6;
arbol;
Xo:=fXf;
Yo:=fYf;
alfa:=Falfa+beta;
radio:=Fradio*0.5;
arbol;
end;
end;
procedure TFractal2.estrella;
var
s:TSegmento;
begin
s:=TSegmento.create(Xo,Yo,1,1);
s.color0:=color0;
if ( alfa <= 2*pi ) then
begin
s.xf:=Xo+radio*cos(alfa);
s.yf:=Yo+radio*sin(alfa);
s.encender;
alfa:=alfa+beta;
estrella;
end;
end;
constructor TFractal2.create(nXo, nYo, nR: real);
begin
Xo:=nXo;
Yo:=nYo;
radio:=nR;
end;
destructor TFractal2.destroy;
begin
end;
procedure TfrmPrincipal.btnArbolClick(Sender: TObject);
var
fract:TFractal2;
begin
fract:=TFractal2.create(-10,-15,8);
fract.alfa:=pi/2;
fract.beta:=pi/8;
fract.arbol;
LFiguras.trazar;
end;
procedure TfrmPrincipal.mnuVectorClick(Sender: TObject);
var
p:TVector;
begin
p:=TVector.create(-17.5,9,20);
p.color0:=ColorGrid1.ForegroundColor;
p.encender;
end;
procedure TfrmPrincipal.mnuSegmentoClick(Sender: TObject);
var
s:TSegmento;
begin
s:=TSegmento.create(-30,15,20,-15);
s.color0:=ColorGrid1.ForegroundColor;
s.encender;
sleep(3000);
s.apagar;
end;
procedure TfrmPrincipal.mnuCircunferenciaClick(Sender: TObject);
var
c:TCircunferencia;
begin
c:=TCircunferencia.create(10,5,8.5);
c.color0:=ColorGrid1.ForegroundColor;
c.encender;
sleep(1000);
c.apagar;
end;
procedure TfrmPrincipal.mnuRectanguloClick(Sender: TObject);
var
r:TRectangulo;
begin
r:=TRectangulo.create(-30,15,20,-15);
r.color0:=ColorGrid1.ForegroundColor;
r.encender;
end;
procedure TfrmPrincipal.Arbol1Click(Sender: TObject);
var
fract:TFractal2;
begin
fract:=TFractal2.create(-3,-15,10);
fract.alfa:=pi/2;
fract.beta:=pi/8;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(-22,-15,8);
fract.alfa:=pi/2;
fract.beta:=(5*pi)/10;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(-13,1.5,7);
fract.alfa:=2*pi/3;
fract.beta:=pi/4;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(10,-15,12);
fract.alfa:=pi/2;
fract.beta:=(5*pi)/4;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(25,-3,8);
fract.alfa:=pi/2;
fract.beta:=(7*pi)/5;
fract.arbol;
LFiguras.trazar;
end;
procedure TfrmPrincipal.Estrella1Click(Sender: TObject);
var
fr:TFractal2;
begin
fr:=TFRactal2.create(15,16,0.6);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(15,16,1);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(15,16,1.4);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(15,16,1.4);
fr.color0:=clblack;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr.destroy;
end;
procedure TfrmPrincipal.mnuTrianguloClick(Sender: TObject);
var
s:TSegmento;
sk:TFractal;
begin
s:=TSegmento.create(-15,-10,15,-10);
s.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
s.encender;
s.xo:=0;
s.yo:=15;
s.encender;
s.xf:=-15;
s.yf:=-10;
s.encender;
sk:=TFractal.create(0,15,15,-10);
sk.Xm:=-15;
sk.Ym:=-10;
sk.sierpinsky;
s.destroy;
LFiguras.trazar;
end;
procedure TfrmPrincipal.mnuArbolClick(Sender: TObject);
var
fract:TFractal2;
begin
fract:=TFractal2.create(-3,-15,10);
fract.alfa:=pi/2;
fract.beta:=pi/8;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(-22,-15,8);
fract.alfa:=pi/2;
fract.beta:=(5*pi)/10;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(-13,1.5,7);
fract.alfa:=pi/2;
fract.beta:=pi/4;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(10,-15,12);
fract.alfa:=pi/2;
fract.beta:=(5*pi)/4;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(25,-3,8);
fract.alfa:=pi/2;
fract.beta:=(7*pi)/5;
fract.arbol;
LFiguras.trazar;
end;
procedure TfrmPrincipal.mnuEstrellaClick(Sender: TObject);
var
fr:TFractal2;
i:integer;
begin
i:=0;
while(i<5)do
begin
fr:=TFRactal2.create(15,16,0.6);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(15,16,1);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(15,16,1.4);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-26,5,0.6);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-26,5,1);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-26,5,1.4);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(10,16,0.6);
fr.color0:=clGreen;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(10,16,1);
fr.color0:=clGreen;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(10,16,1.4);
fr.color0:=clGreen;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-10,7,0.6);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-10,7,1);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-10,7,1.4);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-25,16,0.6);
fr.color0:=clRed;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-25,16,1);
fr.color0:=clRed;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-25,16,1.4);
fr.color0:=clRed;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(28,16,0.6);
fr.color0:=clBlue;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(28,16,1);
fr.color0:=clBlue;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(28,16,1.4);
fr.color0:=clBlue;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
//apagado
fr:=TFRactal2.create(15,16,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
fr:=TFRactal2.create(-26,5,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(10,16,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-10,7,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-25,16,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(28,16,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
i:=i+1;
end;
fr.destroy;
end;
procedure TfrmPrincipal.ColorGrid1Click(Sender: TObject);
begin
frmPrincipal.Lienzo.Color:=frmPrincipal.clgColorFondo.ForegroundColor;
GbxColorFondo.Visible:=false;
clgColorFondo.Visible:=False;
end;
procedure TfrmPrincipal.Fondo1Click(Sender: TObject);
begin
frmPrincipal.clgColorFondo.Visible:=true;
frmPrincipal.gbxColorFondo.Visible:=true;
end;
procedure TfrmPrincipal.mnuCuboClick(Sender: TObject);
var t:TSegmento;
i:integer;
Px,Py:real;
begin
t:=TSegmento.create(0,0,0,0);
t.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
if (IndexA=4) then
begin
Px:=Ax[0];
Py:=Ay[0];
for i:=1 to 3 do
begin
t.xo:=Pxi;
t.yo:=Pyi;
t.xf:=Ax[i];
t.yf:=Ay[i];
t.encender;
Px:=Ax[i];
Py:=Ay[i];
end;
t.xo:=Ax[0];
t.yo:=Ay[0];
t.xf:=Ax[3];
t.yf:=Ay[3];
IndexA:=0;
t.encender;
end;
t.destroy;
end;
procedure TfrmPrincipal.mnuRelojClick(Sender: TObject);
var
t,dt:real;
s:TSegmento;
c:TCircunferencia;
begin
t:=0;
dt:=0.1;
s:=TSegmento.create(0,0,1,1);
c:=TCircunferencia.create(0,0,1);
c.xo:=0;
c.yo:=0;
c.radio:=6;
c.color0:=clblue;
c.encender;
repeat
s.xo:=0;
s.yo:=0;
s.xf:=5*sin(t);
s.yf:=5*cos(t);
s.color0:=clred;
s.encender;
sleep(1000);
t:=t+dt;
s.apagar;
s.encender;
until t>2*pi;
s.destroy;
end;
{ TElipse }
constructor TElipse.create(nxo, nyo, nradio, nradio2: real);
begin
Xo:=nxo;
Yo:=nyo;
radio:=nradio;
radio2:=nradio2;
end;
destructor TElipse.destroy;
begin
end;
procedure TElipse.encender;
var
v:TVector;
t,dt:real;
begin
v:=TVector.create(0,0,1);
t:=0;
dt:=0.001;
repeat
v.xo:=Xo+radio*cos(t);
v.yo:=Yo+radio2*sin(t);
v.encender;
t:=t+dt;
until t >= 2*pi;
v.destroy;
end;
procedure TfrmPrincipal.btnElipseDinClick(Sender: TObject);
begin
bandera:=6;
StatusBar1.Panels[2].Text:='Elipse';
end;
procedure TfrmPrincipal.mnuElipseClick(Sender: TObject);
var
e:TElipse;
begin
e:=TElipse.create(10,5,8,5);
e.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
e.encender;
e.destroy;
end;
procedure TfrmPrincipal.btnCurvaRellenoClick(Sender: TObject);
begin
bandera:=7;
end;
procedure TfrmPrincipal.btnSegmentoDegradadoClick(Sender: TObject);
var
s:TSegmento;
begin
end;
end.
unit Figuras;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ColorGrd, ExtCtrls,Math, ComCtrls;
type
ArregloR = array of real;
TfrmPrincipal = class(TForm)
Panel2D: TPanel;
Lienzo: TPanel;
PaintBox1: TPaintBox;
ColorGrid1: TColorGrid;
btnLimpiar: TButton;
MainMenu1: TMainMenu;
Graficos3d1: TMenuItem;
Fractales1: TMenuItem;
Graficos3d2: TMenuItem;
LaboratoriosVirtuales1: TMenuItem;
Fondo1: TMenuItem;
Salir1: TMenuItem;
gbxGraficosDinamicos: TGroupBox;
btnSegmentoDinam: TButton;
StatusBar1: TStatusBar;
btnCircunferenciaDinam: TButton;
btnRectanguloDinam: TButton;
cbxTipo: TComboBox;
btnCurva: TButton;
btnPoligono: TButton;
edtNumLados: TEdit;
btnCurvaAjuste: TButton;
btnCurvaBezier: TButton;
btnTapete: TButton;
cbxTipoTapete: TComboBox;
btnCurvaLagrange: TButton;
gbxBanderas: TGroupBox;
btnBandera: TButton;
btnBanderaDegradada: TButton;
btnSalir: TButton;
cbxTipoPaleta: TComboBox;
lblTipoPaleta: TLabel;
GrficosEstticos1: TMenuItem;
mnuVector: TMenuItem;
mnuSegmento: TMenuItem;
mnuCircunferencia: TMenuItem;
mnuRectangulo: TMenuItem;
mnuTriangulo: TMenuItem;
mnuArbol: TMenuItem;
mnuEstrella: TMenuItem;
clgColorFondo: TColorGrid;
gbxColorFondo: TGroupBox;
mnuCubo: TMenuItem;
mnuReloj: TMenuItem;
mnuElipse: TMenuItem;
btnElipseDin: TButton;
btnCurvaRelleno: TButton;
procedure Salir1Click(Sender: TObject);
procedure btnVectorClick(Sender: TObject);
procedure btnSegmentoClick(Sender: TObject);
procedure btnCircunferenciaClick(Sender: TObject);
procedure btnRectanguloClick(Sender: TObject);
procedure btnSegmentoDinamClick(Sender: TObject);
procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure btnCircunferenciaDinamClick(Sender: TObject);
procedure btnRectanguloDinamClick(Sender: TObject);
procedure btnCurvaClick(Sender: TObject);
procedure btnPoligonoClick(Sender: TObject);
procedure btnCurvaAjusteClick(Sender: TObject);
procedure btnLimpiarClick(Sender: TObject);
procedure marca(sx,sy:integer);
procedure btnCurvaBezierClick(Sender: TObject);
procedure btnTapeteClick(Sender: TObject);
procedure btnCurvaLagrangeClick(Sender: TObject);
procedure btnSalirClick(Sender: TObject);
procedure btnBanderaClick(Sender: TObject);
procedure btnBanderaDegradadaClick(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure btnPaletaClick(Sender: TObject);
procedure btnFractalClick(Sender: TObject);
procedure btnArbolClick(Sender: TObject);
procedure mnuVectorClick(Sender: TObject);
procedure mnuSegmentoClick(Sender: TObject);
procedure mnuCircunferenciaClick(Sender: TObject);
procedure mnuRectanguloClick(Sender: TObject);
procedure Arbol1Click(Sender: TObject);
procedure Estrella1Click(Sender: TObject);
procedure mnuTrianguloClick(Sender: TObject);
procedure mnuArbolClick(Sender: TObject);
procedure mnuEstrellaClick(Sender: TObject);
procedure ColorGrid1Click(Sender: TObject);
procedure Fondo1Click(Sender: TObject);
procedure mnuCuboClick(Sender: TObject);
procedure mnuRelojClick(Sender: TObject);
procedure btnElipseDinClick(Sender: TObject);
procedure mnuElipseClick(Sender: TObject);
procedure btnCurvaRellenoClick(Sender: TObject);
procedure btnSegmentoDegradadoClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//clase libreria Gráfica
TLibreriaG = class
constructor create();
destructor destroy();
procedure pantalla(x,y:real;var Sx,Sy:integer);
procedure real1(Sx,Sy:integer;var x,y:real);
end;
//clase vector
TVector = class(TLibreriaG)
xo,yo:real;
color0:TColor;
constructor create(nxo,nyo:real;ncolor:TColor);
procedure encender();virtual;
procedure apagar();virtual;
end;
//clase Segmento
TSegmento = class(TVector)
xf,yf:real;
constructor create(nxo,nyo,nxf,nyf:real);
procedure encender();override;
end;
//clase circunferencia
TCircunferencia = class(TVector)
radio:real;
constructor create(nxo,nyo,nradio:real);
destructor destroy();
procedure encender();override;
end;
//clase Rectangulo
TRectangulo = class (TSegmento)
constructor create(nxo,nyo,nxf,nyf:real);
destructor destroy();
procedure encender();override;
end;
//clase Curva vectorial
TCurvaV = class(TCircunferencia)
private
tipo:word;
constructor create(nxo,nyo,nr:real);
destructor destroy();
procedure encender();override;
end;
//clase Poligono
TPoligono = class(TCircunferencia)
nlados:word;
constructor create(nxo,nyo,nradio:real;nl:word);
destructor destroy();
procedure encender();override;
end;
//clase Curva de ajuste
TCurvaA = class(TCurvaV)
NDatos:word;
Vx,Vy:ArregloR;
constructor create(nNDatos:word);
destructor destroy();
function lagrange(x:real):real;
procedure bezier(t:real;var Bx,By:real);
function spline(x:real):real;
procedure encender();override;
end;
//clase Tapete
TTapete = class(TCurvaV)
constructor create(ntipo:word);
destructor destroy();
procedure encender();override;
procedure encenderpaleta();
end;
//clase Figuras
TFiguras = class(TList)
constructor create();
destructor destroy();
procedure trazar();
end;
//clase fractal
TFractal = class(TSegmento)
Xm,Ym:real;
constructor create(nXo,nYo,nXf,nYf:real);
destructor destroy();
procedure sierpinsky();
end;
TFractal2= class(TCurvaV)
alfa,beta:real;
constructor create(nXo,nYo,nR:real);
destructor destroy;
procedure arbol;
procedure estrella;
end;
TElipse = class(TCircunferencia)
radio2:real;
constructor create(nxo,nyo,nradio,nradio2:real);
procedure encender;
destructor destroy;
end;
const
Sxmin=0; Sxmax=700;
Symin=0; Symax=360;
Xmin=-35; Xmax=35;
Ymin=-18; Ymax=18;
var
frmPrincipal: TfrmPrincipal;
bandera:word;
base:TLibreriaG;
Pxi,Pyi,Pxf,Pyf:real;
IndexA:word;
Ax,Ay:ArregloR;
Paleta0:array[0..9] of integer;
Paleta1:array[0..9] of integer;
LFiguras:TFiguras;
implementation
{$R *.dfm}
procedure TfrmPrincipal.Salir1Click(Sender: TObject);
begin
application.Terminate;
end;
{ TLibreriaG }
constructor TLibreriaG.create;
begin
end;
destructor TLibreriaG.destroy;
begin
end;
procedure TLibreriaG.pantalla(x, y: real; var Sx, Sy: integer);
begin
Sx:= Trunc((((Sxmin-Sxmax)/(Xmin-Xmax))*(X-Xmax)))+Sxmax;
Sy:= Trunc((((Symin-Symax)/(Ymax-Ymin))*(Y-Ymax)))+Symin;
end;
procedure TLibreriaG.real1(Sx, Sy: integer; var x, y: real);
begin
x:= ((((Sx-Sxmax)*(Xmin-Xmax))/(Sxmin-Sxmax)))+Xmax;
y:= ((((Sy-Symin)*(Ymax-Ymin))/(Symin-Symax)))+Ymax;
end;
{ TVector }
procedure TVector.apagar;
begin
color0:=frmPrincipal.Lienzo.Color;
encender();
end;
constructor TVector.create(nxo, nyo: real; ncolor: TColor);
begin
xo:=nxo;
yo:=nyo;
color0:=ncolor;
end;
procedure TVector.encender;
var
sx,sy:integer;
begin
Pantalla(xo,yo,sx,sy);
frmPrincipal.PaintBox1.Canvas.Pixels[sx,sy]:=color0;
end;
procedure TfrmPrincipal.btnVectorClick(Sender: TObject);
var
p:TVector;
begin
p:=TVector.create(-17.5,9,20);
p.color0:=ColorGrid1.ForegroundColor;
p.encender;
end;
{ TSegmento }
constructor TSegmento.create(nxo, nyo, nxf, nyf: real);
begin
xo:=nxo;
yo:=nyo;
xf:=nxf;
yf:=nyf;
end;
procedure TSegmento.encender;
var
v:TVector;
t,dt:real;
begin
v:=TVector.create(0,0,color0);
t:=0;
dt:=0.001;
repeat
v.xo:=xo*(1-t)+xf*(t);
v.yo:=yo*(1-t)+yf*(t);
//v.color0:=RGB(trunc(125*t),trunc(-125*(t-1)),0);
v.encender;
t:=t+dt;
until (t>=1);
v.destroy;
end;
procedure TfrmPrincipal.btnSegmentoClick(Sender: TObject);
var
s:TSegmento;
begin
s:=TSegmento.create(-30,15,20,-15);
s.color0:=ColorGrid1.ForegroundColor;
s.encender;
sleep(3000);
s.apagar;
end;
{ TCircunferencia }
constructor TCircunferencia.create(nxo, nyo, nradio: real);
begin
xo:=nxo;
yo:=nyo;
radio:=nradio;
end;
destructor TCircunferencia.destroy;
begin
end;
procedure TCircunferencia.encender;
var
v:TVector;
t,dt:real;
begin
v:=TVector.create(0,0,color0);
t:=-pi;
dt:=0.001;
repeat
v.xo:=xo+radio*cos(t);
v.yo:=yo+radio*sin(t);
v.encender;
t:=t+dt;
until (t >= pi);
v.destroy;
end;
procedure TfrmPrincipal.btnCircunferenciaClick(Sender: TObject);
var
c:TCircunferencia;
begin
c:=TCircunferencia.create(10,5,8.5);
c.color0:=ColorGrid1.ForegroundColor;
c.encender;
sleep(1000);
c.apagar;
end;
{ TRectangulo }
constructor TRectangulo.create(nxo, nyo, nxf, nyf: real);
begin
xo:=nxo;
yo:=nyo;
xf:=nxf;
yf:=nyf;
end;
destructor TRectangulo.destroy;
begin
end;
procedure TRectangulo.encender;
var
s:TSegmento;
begin
s:=TSegmento.create(0,0,0,0);
s.xo:=xo; s.xf:=xf;
s.yo:=yo; s.yf:=yo;
s.encender;
s.xo:=xf; s.xf:=xf;
s.yo:=yo; s.yf:=yf;
s.encender;
s.xo:=xf; s.xf:=xo;
s.yo:=yf; s.yf:=yf;
s.encender;
s.xo:=xo; s.xf:=xo;
s.yo:=yf; s.yf:=yo;
s.encender;
s.destroy;
end;
procedure TfrmPrincipal.btnRectanguloClick(Sender: TObject);
var
r:TRectangulo;
begin
r:=TRectangulo.create(-30,15,20,-15);
r.color0:=ColorGrid1.ForegroundColor;
r.encender;
end;
procedure TfrmPrincipal.btnSegmentoDinamClick(Sender: TObject);
begin
bandera:=1;
StatusBar1.Panels[2].Text:='Segmentos';
end;
procedure TfrmPrincipal.PaintBox1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var rx,ry:real;
begin
base.real1(X,Y,rx,ry);
StatusBar1.Panels[0].Text:=FloatToStr(rx);
StatusBar1.Panels[1].Text:=FloatToStr(ry);
end;
procedure TfrmPrincipal.PaintBox1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
s:TSegmento;
c:TCircunferencia;
r:TRectangulo;
cv:TCurvaV;
p:TPoligono;
d,d2,i:real;
numlados:word;
e:TElipse;
begin
base.real1(X,Y,Pxf,Pyf);
d:=sqrt(sqr(Pxi-Pxf)+sqr(Pyi-Pyf));
d2:=(Pxi-PXf)+(Pyi-PYf);
case bandera of
1:
begin
s:=TSegmento.create(Pxi,Pyi,Pxf,Pyf);
s.color0:=ColorGrid1.ForegroundColor;
s.encender;
LFiguras.Add(s);
end;
2:
begin
c:=TCircunferencia.create(Pxi,Pyi,d);
c.color0:=ColorGrid1.ForegroundColor;
c.encender;
LFiguras.Add(c);
end;
3:
begin
r:=TRectangulo.create(Pxi,Pyi,Pxf,Pyf);
r.color0:=ColorGrid1.ForegroundColor;
r.encender;
LFiguras.Add(r);
end;
4:
begin
cv:=TCurvaV.create(Pxi,Pyi,d);
cv.tipo:=frmPrincipal.cbxTipo.ItemIndex;
cv.color0:=ColorGrid1.ForegroundColor;
cv.encender;
LFiguras.Add(cv);
end;
5:
begin
numlados:=StrToInt(frmPrincipal.edtNumLados.Text);
p:=TPoligono.create(Pxi,Pyi,d,numlados);
p.color0:=ColorGrid1.ForegroundColor;
p.encender;
LFiguras.Add(p);
end;
6:
begin
e:=TElipse.create(pxi,pyf,Abs(pxf-pxi),abs(pyi-pyf));
e.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
e.encender;
e.destroy;
end;
7:
begin
cv:=TCurvaV.create(Pxi,Pyi,d);
cv.tipo:=2;
cv.color0:=ColorGrid1.ForegroundColor;
cv.encender;
LFiguras.Add(cv);
i:=0;
while i<d do
begin
cv:=TCurvaV.create(Pxi,Pyi,i);
cv.tipo:=2;
cv.color0:=ColorGrid1.ForegroundColor;
cv.encender;
i:=i+0.05;
end;
end;
end;
end;
procedure TfrmPrincipal.PaintBox1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
base.real1(X,Y,Pxi,Pyi);
inc(IndexA);
setLength(Ax,IndexA);
setLength(Ay,IndexA);
Ax[IndexA-1]:=Pxi;
Ay[IndexA-1]:=Pyi;
marca(X,Y);
end;
procedure TfrmPrincipal.FormCreate(Sender: TObject);
var i:integer;
begin
IndexA:=0;
Paleta0[0]:=clBlack;
Paleta0[1]:=clBlue;
Paleta0[2]:=clRed;
Paleta0[3]:=clGreen;
Paleta0[4]:=clYellow;
Paleta0[5]:=clNavy;
Paleta0[6]:=clLime;
Paleta0[7]:=clMaroon;
Paleta0[8]:=clAqua;
Paleta0[9]:=clWhite;
Lfiguras:=TFiguras.create;
for i:=0 to 9 do
Paleta1[i]:=RGB(trunc((255*i)/9),trunc((255*i)/9),255);
end;
procedure TfrmPrincipal.btnCircunferenciaDinamClick(Sender: TObject);
begin
bandera:=2;
StatusBar1.Panels[2].Text:='Circunferencias';
end;
procedure TfrmPrincipal.btnRectanguloDinamClick(Sender: TObject);
begin
bandera:=3;
StatusBar1.Panels[2].Text:='Rectangulos';
end;
{ TCurvaV }
constructor TCurvaV.create(nxo, nyo, nr: real);
begin
xo:=nxo;
yo:=nyo;
radio:=nr;
end;
destructor TCurvaV.destroy;
begin
end;
procedure TCurvaV.encender;
var
v:TVector;
t,dt:real;
begin
v:=TVector.create(0,0,color0);
dt:=0.001;
case tipo of
0:
begin
t:=0;
repeat
v.xo:=xo+radio*(cos(3*t));
v.yo:=yo+radio*(sin(2*t));
v.encender;
t:=t+dt;
until t >= (2*pi);
v.destroy;
end;
1:
begin
t:=0;
repeat
v.xo:=xo+radio*(power(cos(t),3));
v.yo:=yo+radio*(power(sin(t),3));
v.encender;
t:=t+dt;
until t >= (2*pi);
end;
2:
begin
t:=0;
repeat
v.xo:=Xo+radio*(0.7*cos(4*t)*cos(t));
v.yo:=Yo+radio*(0.7*cos(4*t)*sin(t));
v.encender;
t:=t+dt;
until t >= (2*pi);
v.destroy;
end;
3:
begin
t:=0;
repeat
v.xo:=Xo+radio*((6*cos(t)-cos(6*t))/4);
v.yo:=Yo+radio*((6*sin(t)-sin(6*t))/4);
v.encender;
t:=t+dt;
until t > (2*pi);
v.destroy;
end;
end;
end;
procedure TfrmPrincipal.btnCurvaClick(Sender: TObject);
begin
if (cbxTipo.Text='Tipo Curva')then
Application.MessageBox('Seleccione el tipo de curva','Error',0)
else
StatusBar1.Panels[2].Text:='Curvas';
bandera:=4;
end;
{ TPoligono }
constructor TPoligono.create(nxo, nyo, nradio: real; nl: word);
begin
xo:=nxo;
yo:=nyo;
radio:=nradio;
nlados:=nl;
end;
destructor TPoligono.destroy;
begin
end;
procedure TPoligono.encender;
var
s:TSegmento;
alfa,beta:real;
begin
s:=TSegmento.create(0,0,0,0);
alfa:=2*pi/nlados;
beta:=pi/2;
repeat
s.xo:=xo+radio*cos(beta);
s.yo:=yo+radio*sin(beta);
s.xf:=xo+radio*cos(beta+alfa);
s.yf:=yo+radio*sin(beta+alfa);
// s.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
s.encender;
beta:=beta+alfa;
until beta >= ((5*pi)/2);
s.destroy;
end;
procedure TfrmPrincipal.btnPoligonoClick(Sender: TObject);
begin
if( edtNumLados.Text = '') then
Application.MessageBox('Ingrese el numero de lados','Error',0)
else
StatusBar1.Panels[2].Text:='Poligonos';
bandera:=5;
end;
{ TCurvaA }
procedure TCurvaA.bezier(t: real; var Bx, By: real);
var
Sx,Sy:real;
i:integer;
function fact(n:integer):longint;
begin
if ((n=0)or(n=1))then
fact:=1
else
fact:=fact(n-1)*n;
end;
begin
Sx:=0;Sy:=0;
for i:=0 to NDatos do
begin
Sx:=Sx+(Vx[i]*(fact(NDatos)/(fact(i)*fact(NDatos-i)))*Power(t,i)*Power(1-t,NDatos-i));
Sy:=Sy+(Vy[i]*(fact(NDatos)/(fact(i)*fact(NDatos-i)))*Power(t,i)*Power(1-t,NDatos-i));
end;
Bx:=Sx;
By:=Sy;
end;
constructor TCurvaA.create(nNDatos: word);
begin
NDatos:=nNDatos;
end;
destructor TCurvaA.destroy;
begin
end;
procedure TCurvaA.encender;
var
v:TVector;
s:TSegmento;
t,dt,wx,wy:real;
begin
v:=TVector.create(0,0,color0);
case tipo of
0:
begin
s:=TSegmento.create(0,0,0,0);
end;
1: //lagrange
begin
t:=Vx[0];
dt:=0.001;
repeat
v.xo:=t;
v.yo:=lagrange(t);
v.encender;
t:=t+dt;
until t >= Vx[NDatos];
v.destroy;
end;
2:
begin
t:=0;
dt:=0.001;
repeat
bezier(t,wx,wy);
v.xo:=wx;
v.yo:=wy;
v.encender;
t:=t+dt;
until t>=1;
v.destroy;
end;
end;
end;
function TCurvaA.lagrange(x: real): real;
var
s,p:real;
i,j:word;
begin
s:=0;
for i:=0 to NDatos do
begin
p:=1;
for j:=0 to NDatos do
begin
if (Vx[i]<>Vx[j]) then
p:=p*((x-Vx[j])/(Vx[i]-Vx[j]));
end;
s:=s+Vy[i]*p;
end;
lagrange:=s;
end;
function TCurvaA.spline(x: real): real;
begin
end;
procedure TfrmPrincipal.btnCurvaAjusteClick(Sender: TObject);
var
s:TSegmento;
i:word;
begin
s:=TSegmento.create(Pxi,Pyi,Pxf,Pyf);
for i:=0 to IndexA-2 do
begin
s.xo:=Ax[i];
s.yo:=Ay[i];
s.xf:=Ax[i+1];
s.yf:=Ay[i+1];
s.color0:=ColorGrid1.ForegroundColor;
s.encender;
LFiguras.Add(s);
end;
end;
procedure TfrmPrincipal.btnLimpiarClick(Sender: TObject);
begin
LFiguras.Clear;
PaintBox1.Repaint;
IndexA:=0;
end;
procedure TfrmPrincipal.marca(sx, sy: integer);
begin
frmPrincipal.PaintBox1.Canvas.Pixels[sx,sy]:=clblue;
frmPrincipal.PaintBox1.Canvas.Pixels[sx+1,sy]:=clblue;
frmPrincipal.PaintBox1.Canvas.Pixels[sx-1,sy]:=clblue;
frmPrincipal.PaintBox1.Canvas.Pixels[sx,sy+1]:=clblue;
frmPrincipal.PaintBox1.Canvas.Pixels[sx,sy-1]:=clblue;
end;
procedure TfrmPrincipal.btnCurvaBezierClick(Sender: TObject);
var
cb:TCurvaA;
begin
cb:=TCurvaA.create(IndexA-1);
cb.Vx:=Ax;
cb.Vy:=Ay;
cb.tipo:=2;
cb.color0:=ColorGrid1.ForegroundColor;
cb.encender;
LFiguras.Add(cb);
end;
{ TTapete }
constructor TTapete.create(ntipo: word);
begin
tipo:=ntipo;
end;
destructor TTapete.destroy;
begin
end;
procedure TTapete.encender;
var
i,j:integer;
aux:real;
begin
begin
case tipo of
0:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=((i*i)*(j*j)) mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
1:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(sin(i))*9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
2:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=((i*i*i)*(j*j*j)) mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
3:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(cos(i)+cos(j)) ;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
4:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(tan(i)+tan(j));
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
5:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(sin(i)*sin(j))*9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
6:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc(PI*i*sqrt(j))mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
7:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i*25)* tan (j*PI*PI))mod 30;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
8:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc(sqrt((378*i)/9))mod 30 + (sqrt((7580*j)/30)+trunc(pi*i*sqrt(j))mod 30);
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
9:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i*25)*tan(j*pi*pi))mod 30;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
10:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i+j)/10)mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta0[trunc(aux)];
end;
end;
end;
end;
end;
procedure TTapete.encenderpaleta;
var
i,j:integer;
aux:real;
begin
begin
case tipo of
0:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=((i*i)*(j*j)) mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
1:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(sin(i))*9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
2:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=((i*i*i)*(j*j*j)) mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
3:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(cos(i)+cos(j)) ;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
4:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(tan(i)+tan(j));
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
5:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=(sin(i)*sin(j))*9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
6:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc(PI*i*sqrt(j))mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
7:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i*25)* tan (j*PI*PI))mod 30;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
8:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc(sqrt((378*i)/9))mod 30 + (sqrt((7580*j)/30)+trunc(pi*i*sqrt(j))mod 30);
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
9:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i*25)*tan(j*pi*pi))mod 30;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
10:
begin
for i:=1 to 700 do
for j:=2 to 360 do
begin
aux:=trunc((i+j)/10)mod 9;
frmPrincipal.PaintBox1.Canvas.Pixels[i,j]:=Paleta1[trunc(aux)];
end;
end;
end;
end;
end;
procedure TfrmPrincipal.btnTapeteClick(Sender: TObject);
var
t,tp:TTapete;
tipo:word;
begin
if(cbxTipoPaleta.Text = 'Tipo Paleta')and (cbxTipoTapete.Text='Tipo Tapete')then
Application.MessageBox('Seleccione el tipo de paleta','Error',0)
else
begin
if (cbxTipoPaleta.Text='Paleta 0')then
if (cbxTipoTapete.Text <> 'Tipo Tapete') then
begin
tipo:=cbxTipoTapete.ItemIndex;
t:=TTapete.create(tipo);
t.encender;
LFiguras.Add(t);
end
else
Application.MessageBox('Seleccione el tipo de tapete','Error',0)
else
if(cbxTipoPaleta.Text='Paleta 1')then
if (cbxTipoTapete.Text <> 'Tipo Tapete') then
begin
tipo:=cbxTipoTapete.ItemIndex;
tp:=TTapete.create(tipo);
tp.encenderPaleta;
LFiguras.Add(tp);
end
else
Application.MessageBox('Seleccione el tipo de tapete','Error',0)
end;
end;
procedure TfrmPrincipal.btnCurvaLagrangeClick(Sender: TObject);
var
cl:TCurvaA;
begin
cl:=TCurvaA.create(IndexA-1);
cl.Vx:=Ax;
cl.Vy:=Ay;
cl.tipo:=1;
cl.color0:=ColorGrid1.ForegroundColor;
cl.encender;
LFiguras.Add(cl);
end;
procedure TfrmPrincipal.btnSalirClick(Sender: TObject);
begin
application.Terminate;
end;
procedure TfrmPrincipal.btnBanderaClick(Sender: TObject);
var
i,j:integer;
begin
for i:=0 to 700 do
begin
for j:=0 to 120 do
PaintBox1.Canvas.Pixels[i,j] :=RGB(0,125,0) ;
for j:=120 to 240 do
PaintBox1.Canvas.Pixels[i,j] := RGB(255,255,255);
for j:=240 to 360 do
PaintBox1.Canvas.Pixels[i,j] := RGB(62,124,230);
end;
end;
procedure TfrmPrincipal.btnBanderaDegradadaClick(Sender: TObject);
var
i,j:integer;
begin
for i:=0 to 700 do
begin
for j:=0 to 180 do
begin
PaintBox1.Canvas.Pixels[i,j] := RGB(Trunc(1.417*(j)), trunc(-0.69*(j-180)+1.417*(j)), Trunc(1.417*(j) ));
end;
for j:=180 to 360 do
begin
PaintBox1.Canvas.Pixels[i,j] := RGB(Trunc(-1.417*(j-360)+0.344*(j-180)),trunc(-1.417*(j-360)+0.68*(j-180)), Trunc(-1.417*(j-360)+1.27*(j-180)) );
end;
end;
end;
{ TFiguras }
constructor TFiguras.create;
begin
end;
destructor TFiguras.destroy;
begin
end;
procedure TFiguras.trazar;
var
i:integer;
begin
for i:=0 to Count-1 do //count es atributo de la clase TList
TVector(Items[i]).encender;
end;
//evento q se ejecuta automaticamente cuando el paintbox aparece
procedure TfrmPrincipal.PaintBox1Paint(Sender: TObject);
begin
LFiguras.trazar();
end;
procedure TfrmPrincipal.btnPaletaClick(Sender: TObject);
var
tp:TTapete;
tipo:word;
begin
if (cbxTipoPaleta.Text='Tipo Paleta')then
Application.MessageBox('Seleccione un tipo de Tapete','Error',0)
else
begin
bandera:=8;
tipo:=cbxTipoPaleta.ItemIndex;
tp:=TTapete.create(tipo);
tp.encenderpaleta;
LFiguras.Add(tp);
end;
end;
{ TFractal }
constructor TFractal.create(nXo, nYo, nXf, nYf: real);
begin
Xo:=nXo;
Yo:=nYo;
Xf:=nXf;
Yf:=nYf;
end;
destructor TFractal.destroy;
begin
end;
procedure TFractal.sierpinsky;
var
s:TSegmento;
Tx,Ty,Mx,My,Rx,Ry,aux,pTx,pTy,pMx,pMy,pRx,pRy,pXo,pYo,pXf,pYf,PXm,PYm:real;
begin
s:=TSegmento.create(0,0,0,0);
aux:=abs(Xo-Xf)+abs(Yo-Yf);
if ( aux > 1.5 ) then
begin
Tx:=(Xo+Xm)/2;
Ty:=(Yo+Ym)/2;
Mx:=(Xo+Xf)/2;
My:=(Yo+Yf)/2;
Rx:=(Xm+Xf)/2;
Ry:=(Ym+Yf)/2;
pTx:=Tx;
pTy:=Ty;
pMx:=Mx;
pMy:=My;
pRx:=Rx;
pRy:=Ry;
pXo:=Xo;
pYo:=Yo;
pXf:=Xf;
pYf:=Yf;
pXm:=Xm;
pYm:=Ym;
s.xo:=Tx;
s.yo:=Ty;
s.xf:=Mx;
s.yf:=My;
s.encender;
s.xo:=Rx;
s.yo:=Ry;
s.encender;
s.xf:=Tx;
s.yf:=Ty;
s.encender;
Xo:=pMx;
Yo:=pMy;
Xm:=Rx;
Ym:=Ry;
sierpinsky;
Xo:=pTx;
Yo:=pTy;
Xf:=pRx;
Yf:=pRy;
Xm:=pXm;
Ym:=pYm;
sierpinsky;
Xo:=pXo;
Yo:=pYo;
Xm:=pTx;
Ym:=pTy;
Xf:=pXm;
Yf:=pYm;
sierpinsky;
Xo:=pXo;
Yo:=pYo;
Xf:=pMx;
Yf:=pMy;
Xm:=pTx;
Ym:=pTy;
sierpinsky;
end;
end;
procedure TfrmPrincipal.btnFractalClick(Sender: TObject);
var
s:TSegmento;
sk:TFractal;
begin
s:=TSegmento.create(-15,-10,15,-10);
s.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
s.encender;
s.xo:=0;
s.yo:=15;
s.encender;
s.xf:=-15;
s.yf:=-10;
s.encender;
sk:=TFractal.create(0,15,15,-10);
sk.Xm:=-15;
sk.Ym:=-10;
sk.sierpinsky;
s.destroy;
LFiguras.trazar;
end;
{ TFractal2 }
procedure TFractal2.arbol;
var
s:TSegmento;
Fradio,Falfa:real;fXf,fYf:real;
begin
s:=TSegmento.create(Xo,Yo,1,1);
Falfa:=alfa;
Fradio:=radio;
if (radio > 0.1 ) then
begin
s.color0:=RGB(trunc(-32.27*(radio-8)),255,trunc(-32.27*(radio-8)));
s.xf:=Xo+radio*cos(alfa);
s.yf:=Yo+radio*sin(alfa);
s.encender;
fXf:=s.xf;
fYf:=s.yf;
Xo:=s.xf;
Yo:=s.yf;
alfa:=Falfa-beta;
radio:=Fradio*0.5;
arbol;
Xo:=s.xf;
Yo:=s.yf;
alfa:=Falfa;
radio:=Fradio*0.6;
arbol;
Xo:=fXf;
Yo:=fYf;
alfa:=Falfa+beta;
radio:=Fradio*0.5;
arbol;
end;
end;
procedure TFractal2.estrella;
var
s:TSegmento;
begin
s:=TSegmento.create(Xo,Yo,1,1);
s.color0:=color0;
if ( alfa <= 2*pi ) then
begin
s.xf:=Xo+radio*cos(alfa);
s.yf:=Yo+radio*sin(alfa);
s.encender;
alfa:=alfa+beta;
estrella;
end;
end;
constructor TFractal2.create(nXo, nYo, nR: real);
begin
Xo:=nXo;
Yo:=nYo;
radio:=nR;
end;
destructor TFractal2.destroy;
begin
end;
procedure TfrmPrincipal.btnArbolClick(Sender: TObject);
var
fract:TFractal2;
begin
fract:=TFractal2.create(-10,-15,8);
fract.alfa:=pi/2;
fract.beta:=pi/8;
fract.arbol;
LFiguras.trazar;
end;
procedure TfrmPrincipal.mnuVectorClick(Sender: TObject);
var
p:TVector;
begin
p:=TVector.create(-17.5,9,20);
p.color0:=ColorGrid1.ForegroundColor;
p.encender;
end;
procedure TfrmPrincipal.mnuSegmentoClick(Sender: TObject);
var
s:TSegmento;
begin
s:=TSegmento.create(-30,15,20,-15);
s.color0:=ColorGrid1.ForegroundColor;
s.encender;
sleep(3000);
s.apagar;
end;
procedure TfrmPrincipal.mnuCircunferenciaClick(Sender: TObject);
var
c:TCircunferencia;
begin
c:=TCircunferencia.create(10,5,8.5);
c.color0:=ColorGrid1.ForegroundColor;
c.encender;
sleep(1000);
c.apagar;
end;
procedure TfrmPrincipal.mnuRectanguloClick(Sender: TObject);
var
r:TRectangulo;
begin
r:=TRectangulo.create(-30,15,20,-15);
r.color0:=ColorGrid1.ForegroundColor;
r.encender;
end;
procedure TfrmPrincipal.Arbol1Click(Sender: TObject);
var
fract:TFractal2;
begin
fract:=TFractal2.create(-3,-15,10);
fract.alfa:=pi/2;
fract.beta:=pi/8;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(-22,-15,8);
fract.alfa:=pi/2;
fract.beta:=(5*pi)/10;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(-13,1.5,7);
fract.alfa:=2*pi/3;
fract.beta:=pi/4;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(10,-15,12);
fract.alfa:=pi/2;
fract.beta:=(5*pi)/4;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(25,-3,8);
fract.alfa:=pi/2;
fract.beta:=(7*pi)/5;
fract.arbol;
LFiguras.trazar;
end;
procedure TfrmPrincipal.Estrella1Click(Sender: TObject);
var
fr:TFractal2;
begin
fr:=TFRactal2.create(15,16,0.6);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(15,16,1);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(15,16,1.4);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(15,16,1.4);
fr.color0:=clblack;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr.destroy;
end;
procedure TfrmPrincipal.mnuTrianguloClick(Sender: TObject);
var
s:TSegmento;
sk:TFractal;
begin
s:=TSegmento.create(-15,-10,15,-10);
s.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
s.encender;
s.xo:=0;
s.yo:=15;
s.encender;
s.xf:=-15;
s.yf:=-10;
s.encender;
sk:=TFractal.create(0,15,15,-10);
sk.Xm:=-15;
sk.Ym:=-10;
sk.sierpinsky;
s.destroy;
LFiguras.trazar;
end;
procedure TfrmPrincipal.mnuArbolClick(Sender: TObject);
var
fract:TFractal2;
begin
fract:=TFractal2.create(-3,-15,10);
fract.alfa:=pi/2;
fract.beta:=pi/8;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(-22,-15,8);
fract.alfa:=pi/2;
fract.beta:=(5*pi)/10;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(-13,1.5,7);
fract.alfa:=pi/2;
fract.beta:=pi/4;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(10,-15,12);
fract.alfa:=pi/2;
fract.beta:=(5*pi)/4;
fract.arbol;
LFiguras.trazar;
fract:=TFractal2.create(25,-3,8);
fract.alfa:=pi/2;
fract.beta:=(7*pi)/5;
fract.arbol;
LFiguras.trazar;
end;
procedure TfrmPrincipal.mnuEstrellaClick(Sender: TObject);
var
fr:TFractal2;
i:integer;
begin
i:=0;
while(i<5)do
begin
fr:=TFRactal2.create(15,16,0.6);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(15,16,1);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(15,16,1.4);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-26,5,0.6);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-26,5,1);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-26,5,1.4);
fr.color0:=clLime;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(10,16,0.6);
fr.color0:=clGreen;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(10,16,1);
fr.color0:=clGreen;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(10,16,1.4);
fr.color0:=clGreen;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-10,7,0.6);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-10,7,1);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-10,7,1.4);
fr.color0:=clYellow;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-25,16,0.6);
fr.color0:=clRed;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-25,16,1);
fr.color0:=clRed;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-25,16,1.4);
fr.color0:=clRed;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(28,16,0.6);
fr.color0:=clBlue;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(28,16,1);
fr.color0:=clBlue;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(28,16,1.4);
fr.color0:=clBlue;;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
//apagado
fr:=TFRactal2.create(15,16,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
fr:=TFRactal2.create(-26,5,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(10,16,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-10,7,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(-25,16,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
fr:=TFRactal2.create(28,16,1.4);
fr.color0:=frmPrincipal.Lienzo.Color;
fr.beta:=pi/8;
fr.alfa:=0;
fr.estrella;
sleep(1000);
i:=i+1;
end;
fr.destroy;
end;
procedure TfrmPrincipal.ColorGrid1Click(Sender: TObject);
begin
frmPrincipal.Lienzo.Color:=frmPrincipal.clgColorFondo.ForegroundColor;
GbxColorFondo.Visible:=false;
clgColorFondo.Visible:=False;
end;
procedure TfrmPrincipal.Fondo1Click(Sender: TObject);
begin
frmPrincipal.clgColorFondo.Visible:=true;
frmPrincipal.gbxColorFondo.Visible:=true;
end;
procedure TfrmPrincipal.mnuCuboClick(Sender: TObject);
var t:TSegmento;
i:integer;
Px,Py:real;
begin
t:=TSegmento.create(0,0,0,0);
t.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
if (IndexA=4) then
begin
Px:=Ax[0];
Py:=Ay[0];
for i:=1 to 3 do
begin
t.xo:=Pxi;
t.yo:=Pyi;
t.xf:=Ax[i];
t.yf:=Ay[i];
t.encender;
Px:=Ax[i];
Py:=Ay[i];
end;
t.xo:=Ax[0];
t.yo:=Ay[0];
t.xf:=Ax[3];
t.yf:=Ay[3];
IndexA:=0;
t.encender;
end;
t.destroy;
end;
procedure TfrmPrincipal.mnuRelojClick(Sender: TObject);
var
t,dt:real;
s:TSegmento;
c:TCircunferencia;
begin
t:=0;
dt:=0.1;
s:=TSegmento.create(0,0,1,1);
c:=TCircunferencia.create(0,0,1);
c.xo:=0;
c.yo:=0;
c.radio:=6;
c.color0:=clblue;
c.encender;
repeat
s.xo:=0;
s.yo:=0;
s.xf:=5*sin(t);
s.yf:=5*cos(t);
s.color0:=clred;
s.encender;
sleep(1000);
t:=t+dt;
s.apagar;
s.encender;
until t>2*pi;
s.destroy;
end;
{ TElipse }
constructor TElipse.create(nxo, nyo, nradio, nradio2: real);
begin
Xo:=nxo;
Yo:=nyo;
radio:=nradio;
radio2:=nradio2;
end;
destructor TElipse.destroy;
begin
end;
procedure TElipse.encender;
var
v:TVector;
t,dt:real;
begin
v:=TVector.create(0,0,1);
t:=0;
dt:=0.001;
repeat
v.xo:=Xo+radio*cos(t);
v.yo:=Yo+radio2*sin(t);
v.encender;
t:=t+dt;
until t >= 2*pi;
v.destroy;
end;
procedure TfrmPrincipal.btnElipseDinClick(Sender: TObject);
begin
bandera:=6;
StatusBar1.Panels[2].Text:='Elipse';
end;
procedure TfrmPrincipal.mnuElipseClick(Sender: TObject);
var
e:TElipse;
begin
e:=TElipse.create(10,5,8,5);
e.color0:=frmPrincipal.ColorGrid1.ForegroundColor;
e.encender;
e.destroy;
end;
procedure TfrmPrincipal.btnCurvaRellenoClick(Sender: TObject);
begin
bandera:=7;
end;
procedure TfrmPrincipal.btnSegmentoDegradadoClick(Sender: TObject);
var
s:TSegmento;
begin
end;
end.
