Pascal/Turbo Pascal - DEMO trayectoria circular

 
Vista:

DEMO trayectoria circular

Publicado por micropais (209 intervenciones) el 11/10/2005 00:31:58
trayectoria circular mas dificil que la anterior, pero si viste circulo a base de puntos comprenderas mejor su funcionamiento
_________________________________________________________________

uses crt,uteclado,graph;
var a:real;
b:integer;
c:real;

extension:byte;
gd,gm:integer;
ancho,alto:real;
centrox,centroy:integer;
cociente:integer;
tsin,tcos:integer;
n_puntos:real;

I_bucle:real;
F_bucle:real;
D:real;
giro_ancho:boolean;
giro_alto:boolean;
tocavez:boolean;

begin
gd:=0; { 0,1 }
gm:=1;
initgraph(gd,gm,'c:\tp\bgi');{}

directvideo:=false;

{*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-}
textcolor(3);
gotoxy(1,1);
writeln('MICROPAIS 2005 - DEMO Trayectorias Circulares ');
textcolor(7);
writeln('usa las teclas ARRIBA y ABAJO ¢ ESC para SALIR');

centrox:=640 div 2 ; { la resolucion de la pantalla div 2 }
centroy:=(400 div 2)+100;


tsin:=90;
tcos:=90;

cociente:=10{1}; { multiplicador de tama¤o normal=1 para aspecto RATIO }
ancho:=(50 * cociente) / 10 {16}; { aspecto ratio }
alto :=(50 * cociente) / 10 {14}; { aspecto ratio }
{
10,13 gd=3

si cociente =1 nos podemos evitar la division si multiplicamos por 10 y
dividimos por 10 nos quedamos igual,paro como la pantalla no mide lo
mismo de ancho que de alto, al crear un circulo ,parecera una elipse,
al usar aspecto ratio podemos aproximarnos mas al crear circulo perfectos
dependiendo del tipo de pantalla que usemos tambien podra se usado para
crear elipses a nuestro gusto
}
{ancho y alto del circulo aqui podemos meter el aspecto 1:1 normal}
{si cociente =10 aqui lo normal es 10:10 16:14 etc }

{ tsin:=trunc(sin(1)*ancho)+centrox;
tcos:=trunc(cos(1)*alto)+centroy;{}
n_puntos:=trunc(6);{ numero de puntos totales que formam el circulo}
extension:=2;
{*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-}
textcolor(14);
F_bucle:=2*pi; {2*pi}
I_bucle:=0;

{ para probar aspecto ratio _____________________ }
{
setcolor(14);
circle(centrox,centroy,150);
{_________________________________________________ }
c:=0;
d:=0;

repeat
{ aqui dibujamos los puntos con el color 15 }
c:=c+0.05;
if c>2*pi then c:=0;

d:=+0.5;
a:=I_bucle+c;

if (ancho>50) and (tocavez=false) then
begin giro_ancho:=true;
tocavez:=true;
end;
if (ancho<-50) and (tocavez=false) then
begin giro_ancho:=false;
tocavez:=false;
end;

if (alto>50) and (tocavez=true) then
begin
giro_alto:=true;
tocavez:=false;
end;

if (alto<-50) and (tocavez=true) then
begin
giro_alto:=false;
tocavez:=true;
end;

if giro_alto=true then alto:=alto-d else alto:=alto+d;
if giro_ancho=true then ancho:=ancho-d else ancho:=ancho+d;

{alto:=alto+d;{}

while a < F_bucle+c do

begin

{writeln(trunc(sin(a)*10),trunc(cos(a)*10));}
{setcolor(15); {color de los puntos}

tsin:=trunc(sin(a)*ancho)+centrox;
tcos:=trunc(cos(a)*alto)+centroy;
REPEAT UNTIL PORT[$3DA]AND 8=0;{}

for b:=1 to extension do
begin
putpixel (tsin+b,tcos,15);
putpixel (tsin-b,tcos,15);
putpixel (tsin,tcos+b,15);
putpixel (tsin,tcos-b,15);{}

end;
a:=a+( (2*pi) / n_puntos );
end;
REPEAT UNTIL PORT[$3DA]AND 8<>0;{}
{repeat
repeat
delay(1);
until tecla_pulsada=0;
delay(50);
until tecla_pulsada<>0;{}

{--------------------------------------------------------------------------}
{--------------------------------------------------------------------------}
{ aqui borramos los puntos con el color 0 }
a:=I_bucle+c;
while a < F_bucle+c do
begin
{writeln(trunc(sin(a)*10),trunc(cos(a)*10));}
{setcolor(0);{}
tsin:=trunc(sin(a)*ancho)+centrox;
tcos:=trunc(cos(a)*alto)+centroy;

REPEAT UNTIL PORT[$3DA]AND 8=0;{}
for b:=1 to extension do
begin
putpixel (tsin+b,tcos,0);
putpixel (tsin-b,tcos,0);
putpixel (tsin,tcos+b,0);
putpixel (tsin,tcos-b,0);{}

end;
a:=a+((2*pi) / n_puntos);
end;

if tecla_pulsada=arriba then n_puntos:=n_puntos+1;
if tecla_pulsada=abajo then n_puntos:=n_puntos-1;
if n_puntos<1 then n_puntos:=1;
if n_puntos>36 then n_puntos:=36;{}

gotoxy(1,4);
writeln('Puntos ',n_puntos:3:0);

until tecla_pulsada=1;


end.


readln;
end.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder