Dibujo De Formas Básicas

Putpixel(Columna, Fila, Color);

Pinta un pixel (Puntito) en la columna, fila con el color determinado; ejemplo:

putpixel(Getmaxx Div 2, GetmaxY Div 2, Red);

pinta un punto en el centro de la pantalla de color Rojo.

putpixel(100,150, Magenta);

pinta un punto en la columna 100, fila 150 de color Magenta.

!Pero que bonito dibujo!

program Uso_De_ PutPixel;
uses Crt, Graph;
var

Gd, Gm : Integer;

begin{Inicio del programa principal}

GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}

InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);
{Evalua, si la inicialización no fue correcta entonces Termina}

Randomize;{Se activa el generador de números aleatorios}

{En este ciclo se pintan pixels en posiciones y colores aleatorios}
repeat
{Inicio del ciclo Repeat - Until, que funciona hasta que el usuario presione una tecla}

{Se pinta un punto en cualquier columna entre 0 y getmaxx, cualquier fila entre 0 y getmaxY, y cualquier color entre 0 y 16} PutPixel(Random(getmaxX),Random(getmaxY),random(16));

Delay(10);{Hace una espera de 10 milisegundos}

until KeyPressed;{Final del ciclo Repeat - Until}

   CloseGraph;{Cierra el modo gráfico}
end.
{Final del programa principal}

Circle(Columna, Fila, Radio);

Pinta un circulo en la columna, fila, con un radio que se mide en Pixels; por ejemplo:

circle(150, 85, 30);

Dibuja un circulo en la columna 150, fila 85 de 30 pixels de radio;

Mira como soy de redondito

Program Ejemplo_de_circulos;
uses Crt, Graph;
var

Gd, Gm, Color : Integer;

begin{Inicio del programa principal}

GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}

InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);
{Evalua, si la inicialización no fue correcta entonces Termina}

Randomize;{Se activa el generador de números aleatorios}

{En este ciclo se pintan circulos en posiciones, tamaños y colores aleatorios}
repeat
{Inicio del ciclo Repeat - Until, que funciona hasta que el usuario presione una tecla}

{Se pinta un circulo en cualquier columna entre 0 y getmaxx, cualquier fila entre 0 y getmaxY, cualquier tamaño entre 0 y 30, y cualquier color entre 0 y 16}

Color:=random(16);{Se genera el color aleatoriamente}

Circle(Random(getmaxX),Random(getmaxY),Random(30));

Delay(10);{Hace una espera de 10 milisegundos}

until KeyPressed;{Final del ciclo Repeat - Until}

   CloseGraph;{Cierra el modo gráfico}
end.
{Final del programa principal}

Arc(Columna, Fila, Angulo_inicial, Angulo_final, radio);

Pinta una porción de un circulo en la columna, fila con un radio que se mide en pixels, empezando en Angulo_incial en el sentido contrario al de las manecillas del reloj y terminando en Angulo_final.

Uyyyy, que arco tan pronunciado

El siguiente programa pinta un Sonrie, es un buen alimento para el espíritu con el uso de arcos.

Program Ejemplo_de_Arcos;
uses Crt, Graph;
var

Gd, Gm, Color : Integer;

begin{Inicio del programa principal}

GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}

InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);
{Evalua, si la inicialización no fue correcta entonces Termina}

arc(getmaxx div 2,getmaxy div 2,0,360,100);{Pinta el círculo exterior}
arc(getmaxx div 2,getmaxy div 2,180,360,60);
{Pinta la sonrisa}
arc(getmaxx div 2-30,getmaxy div 2-40,0,360,10);
{Pinta el ojo izquierdo}
arc(getmaxx div 2+30,getmaxy div 2-40,0,360,10);
{Pinta el ojo derecho}
arc(getmaxx div 2-60,getmaxy div 2,0,180,5);
{Pinta el arco izquierdo de la sonrisa}
arc(getmaxx div 2+60,getmaxy div 2,0,180,5);
{Pinta el arco derecho de la sonrisa}
readkey;
{Espera a que se presione cualquier tecla}

   CloseGraph;{Cierra el modo gráfico}
end.
{Final del programa principal}

 

Ellipse(Columna, Fila, Angulo_inicial, Radio_Columnas, Radio_filas);

Se comporta de manera similar a Arc, solo que aquí se Pinta un ovalo y se debe especificar el radio en X y Y.

elipse.gif (11320 bytes)

El siguiente programa pinta un con el uso de Elipses.

Program Ejemplo_de_Ellipses;
uses Crt, Graph;
var

Gd, Gm, Color : Integer;

begin{Inicio del programa principal}

GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}

InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);
{Evalua, si la inicialización no fue correcta entonces Termina}

ellipse(getmaxx div 2,getmaxy div 2,0,360,100,100);{Pinta el círculo exterior}
ellipse(getmaxx div 2,getmaxy div 2,180,360,60,60);
{Pinta la sonrisa}
ellipse(getmaxx div 2-30,getmaxy div 2-40,0,360,10,10);
{Pinta el ojo izquierdo}
ellipse(getmaxx div 2+30,getmaxy div 2-40,0,360,10,10);
{Pinta el ojo derecho}
ellipse(getmaxx div 2-60,getmaxy div 2,0,180,5,5);
{Pinta el arco izquierdo de la sonrisa}
ellipse(getmaxx div 2+60,getmaxy div 2,0,180,5,5);
{Pinta el arco derecho de la sonrisa}
readkey;
{Espera a que se presione cualquier tecla}

   CloseGraph;{Cierra el modo gráfico}
end.
{Final del programa principal}

 

FillEllipse(Columna, Fila, Radio_Columnas, Radio_filas);

Pinta una ellipse rellena (Un ovalo), cuyo radio en radio en X y Y se debe especificar.

elipse2.gif (30901 bytes)

El siguiente programa pinta un Don't worry, be happy con el uso de Círculos, Elipses, y Elipses rellenas; ademas implementa una rutina de simulación de guiño del ojo izquierdo.

Program Ejemplo_de_Ellipses_Rellenas;
uses Crt, Graph;
var

Gd, Gm, Color : Integer;

begin{Inicio del programa principal}

GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}

InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);
{Evalua, si la inicialización no fue correcta entonces Termina}

setcolor(YELLOW);{Se fija el color a amarillo}
setfillstyle(1,YELLOW);
{Se fija el estilo de relleno a liso con color amarillo}
circle(getmaxx div 2,getmaxy div 2,100);
{Se pinta el círculo exterior}
floodfill(getmaxx div 2,getmaxy div 2,YELLOW);
{Se rellena el circulo con color amarillo}
setcolor(BLACK);
{Se fija el color a negro}
arc(getmaxx div 2,getmaxy div 2,180,360,60);
{Se pinta la sonrisa}
arc(getmaxx div 2-60,getmaxy div 2,0,180,5);
{Pinta el arco izquierdo de la sonrisa}
arc(getmaxx div 2+60,getmaxy div 2,0,180,5);
{Pinta el arco derecho de la sonrisa}

setfillstyle(1,BLACK);
{Se fija el estilo de relleno a liso con color negro}
fillellipse(getmaxx div 2-30,getmaxy div 2-40,10,20);
{Se pinta el ojo izquierdo}
fillellipse(getmaxx div 2+30,getmaxy div 2-40,10,20);
{Se pinta el ojo derecho}
readkey;
{Se espera hasta que se presione cualquier tecla}
{En el siguiente ciclo se simula el guiño del ojo izquierdo}
for y:=20 downto 0 do
begin
   setcolor(YELLOW);
   fillellipse(getmaxx div 2-30,getmaxy div 2-40,10,y);
{La elipse va decreciendo en sentido vertical}
   delay(50);
{Hace una espera de 50 milisegundos}
end;

readkey;
{Espera a que se presione cualquier tecla}

   CloseGraph;{Cierra el modo gráfico}
end.
{Final del programa principal}


PieSlice(Columna,Fila, Ángulo_inicial, Angulo_final, Radio); 

PieSlice dibuja un trozo de diagrama de torta con centro x, y comienza en AngIni y termina en AngFin, y como último valor se le da el radio.

¿Verdad que se parece a la comelona de Pacman?

Program Ejemplo_de_Tortitas;
uses Crt, Graph;
var

Gd, Gm, Color : Integer;

begin{Inicio del programa principal}

GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}

InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);
{Evalua, si la inicialización no fue correcta entonces Termina}

Randomize;{Se activa el generador de números aleatorios}

{En este ciclo se pintan trozos de torta (parece mas bien una pastelería) en posiciones, tamaños y colores aleatorios}
repeat
{Inicio del ciclo Repeat - Until, que funciona hasta que el usuario presione una tecla}

color:=random(getmaxcolor);{Se color se genera aleatoriamente entre 0 y el número máximo soportado por la tarjeta gráfica}
setcolor(color);
{Se fija el color}
setfillstyle(1,color);
{Se fija el estilo de relleno a solido con el color especificado}

{A continuación se pintan los trozos de torta en las posiciones, ángulos inicial y final, y el tamaño de manera aleatoría}
PieSlice(random(getmaxX),Random(getmaxY),random(360),random(360), Random(100));

Delay(10);{Hace una espera de 10 milisegundos}

until KeyPressed;{Final del ciclo Repeat - Until}

   CloseGraph;{Cierra el modo gráfico}
end.
{Final del programa principal}

Sector(Columna,Fila, Angulo_inicial, Angulo_final, RadioX, RadioY);

Este procedimiento Sector dibuja un sector con centro en columna, fila, que empieza en Angulo_Inicial, termina en Angulo_Final, con un radio horizontal RadioX y un radio vertical RadioY.

Que rica tortita

Para darte una mejor idea, si has graficado en excel información con diagramas de pastel; pues bien... esos son los sectores.

 

Program Ejemplo_de_Sectores;
uses Crt, Graph;
var

Gd, Gm : Integer;

begin{Inicio del programa principal}

GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}

InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);
{Evalua, si la inicialización no fue correcta entonces Termina}

setfillstyle(1,LIGHTBLUE);{Se fija el estilo de relleno a solido con el color azul brillante}
Sector(100,100,45,357, 100, 100);
{Se pinta un sector en la columna 100, fila 100, que empieza en 45º y termina en 357º, con radio en X y Y de 100 pixels}
setfillstyle(1,YELLOW);
{Se fija el estilo de relleno a solido con el color amarillo}
Sector(110,97,0,40, 90, 100);
{Se pinta un sector en la columna 100, fila 97, que empieza en 0º y termina en 40º, con radio en X  de 90 pixels y Y de 100 pixels}

readkey;{Espera a que se presione cualquier tecla}

   CloseGraph;{Cierra el modo gráfico}
end.
{Final del programa principal}

Line(X1, Y1, X2, Y2);

Traza una linea recta entre 2 puntos, X1, Y1 son el punto inicial y X2, Y2 el punto final, donde:

X1 = Columna Inicial

Y1 = Fila Inicial

X2 = Columna Final

Y2 = Fila Fina.

linea.gif (7828 bytes)

El siguiente programa traza el plano cartesiano;

Program Plano_Cartesiano;
uses Crt, Graph;
var

Gd, Gm : Integer;
incremento,i:integer;

begin{Inicio del programa principal}

GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}

InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);
{Evalua, si la inicialización no fue correcta entonces Termina}

setbkcolor(lightblue);{Se pinta el fondo de color azul brillante}
setcolor(yellow);
{Se fijal color Amarillo para los ejes X y Y}
setlinestyle(0,0,3);
{Escogemos el tipo de linea gruesa}
line(300,0,300,getmaxy);
{Se traza el Eje de la 'X'}
line(0,300,getmaxx,300);
{Se traza el Eje de la 'Y'}
setlinestyle(1,0,0);
{Escogemos el estilo de linea punteada}
setcolor(darkgray);
{Se pasa el color a Gris Oscuro para pintar las lineas punteadas}
incremento:=100;
{Se establece el incremento, se hace de 100 pixels entre linea y linea}
{Con este ciclo se trazan las lineas punteadas del plano en X y Y}
for i:=1 to 6 do
begin

line((i*incremento),0,(i*incremento),getmaxy);{Se trazan las lineas en "Y"}
line(0,(i*incremento),getmaxx,(i*incremento));
{Se trazan las lineas en "X"}

end;

readkey;{Espera a que se presione cualquier tecla}

   CloseGraph;{Cierra el modo gráfico}
end.
{Final del programa principal}

LineTo(Columna_final, Fila_final);

Traza una linea recta desde la posicion actual hasta Columna_final, Fila_final;

lineto.gif (13491 bytes)

El  siguiente programa traza la gráfica de la    función seno por medio de lineto:

Program Grafica_funcion_Seno;
Uses crt,graph;
var

Gd, Gm : Integer;


x,y,midx,midy,aspecto,incremento : integer;
inicio,fin : real;

begin
{Inicio del programa principal}

GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}

InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);
{Evalua, si la inicialización no fue correcta entonces Termina}

incremento:=100;{Esta variable configura el tamaño de la gráfica.
A mayor valor mayor tamaño y viceversa}

inicio:=-4;
{Este es el inicio de la gráfica en el eje "X", si quieres puedes cambiarlo por otro valor, para que observes como varia esta}
fin:=5;
{Este es el final de la gráfica en el eje "X", al igual que el anterior tambien lo puedes variar}
setcolor(
LIGHTBLUE);{Esta función habilita el color azul brillante para la linea de graficación de la función.}
repeat
{Sección de cálculo de valores}


x:=round(inicio*incremento);
y:=round(sin(inicio)*incremento);
{se hace uso de la función seno para saber la posición en el eje "Y"}
inicio:=inicio+0.1;
{Se incrementa de 0.1 desde el valor inicial
controlado en este caso por la variable "inicio", hasta el valor final controlado por la variable "fin"}

aspecto:=(getmaxx) div (getmaxy);
midx:=getmaxx div 4;
midy:=round((getmaxy div 2)*(1/aspecto));
lineto(midx+x,midy-y);
{Uso de lineto para trazar la gráfica}
delay(5);
{Hace una espera de 50 milisegundos}


until (inicio>=fin);
{Final del ciclo repeat-Until}

    readkey;{Espera a que se presione cualquier tecla}

   CloseGraph;{Cierra el modo gráfico}
end.
{Final del programa principal}

Rectangle(X1, Y1, X2, Y2);

Dibuja un rectángulo entre 2 puntos, X1, Y1 son el punto inicial y X2, Y2 el punto final, donde:

X1 = Columna Inicial

Y1 = Fila Inicial

X2 = Columna Final

Y2 = Fila Final.

rectangu.gif (12118 bytes)

El siguiente programa traza una malla de rectangulos en toda la pantalla:

Program Uso_de_Rectangulos;
Uses crt,graph;
var

Gd, Gm : Integer;
i,j           : byte;


begin
{Inicio del programa principal}

GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}

InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);
{Evalua, si la inicialización no fue correcta entonces Termina}

for i:=1 to getmaxx div 22 do

    for j:=1 to getmaxy div 22 do
           begin

setcolor(LIGHTBLUE);
rectangle(i*20+10,j*20+10,i*20+50,j*20+50);

end;

end;

readkey;{Espera a que se presione cualquier tecla}

   CloseGraph;{Cierra el modo gráfico}
end.
{Final del programa principal}

 

Bar(X1, Y1, X2, Y2);

Dibuja un rectángulo relleno (el estilo del relleno y color de este se fijan mediante los procedimientos setfillstyle y setcolor) entre 2 puntos, X1, Y1 son el punto inicial y X2, Y2 el punto final, donde:

X1 = Columna Inicial

Y1 = Fila Inicial

X2 = Columna Final

Y2 = Fila Final.

barra1.gif (34494 bytes)

En el siguiente ejemplo mediante el uso un vector, se simula un gráfica de barras (Como lo harías en Excel) que varía sus valores aleatoriamente y se repite hasta que el usuario presiona una tecla (También se puede utilizar para simular el ecualizador de un equipo de sonido).

program Uso_de_Barras;
const

   tamano=20;

var

vector:array[1..tamano] of integer;
i,j,tempo,x,y : integer;

Gd, Gm : Integer;

begin{Inicio del programa principal}

GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}

InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);
{Evalua, si la inicialización no fue correcta entonces Termina}

randomize; {Se activa el generador de numeros aleatorios}
repeat
{Este ciclo se repite hasta que el usuario presione una tecla}

x:=10;{Valor inicial de las columnas en el plano cartesiano}
y:=getmaxy-10;
{Valor inicial de las filas en el plano cartesiano}
cleardevice;
{Se limpia la pantalla}
{En el siguiente ciclo se llenan con valores aleatorios entre 0 y 10 las posiciones del vector}
for i:=1 to tamano do vector[i]:=random(tamano);

for i:=1 to tamano do
{Se hace un recorrido desde 1 hasta el tama¤o del vector}

begin {Inicio del ciclo for i}
tempo:=vector[i];
{El valor de la posición es almacendado en la variable tempo}
setcolor(i);
{Se fija un color para cada columna de valores}
setfillstyle(1,i);
{Se fija el estilo y relleno del vector}

for j:=1 to tempo do{se hace un ciclo desde 1 hasta el valor almacenado en la variable tempo}

begin {Inicio del ciclo for j}

bar(x,y-j*10,x+15,y-((j*10)+4));{Pintamos la barra en las posiciones x1,y1, x2, y2 }
delay(5);
{Se hace una espera de 5 milisegundos}

end; {Final del ciclo for j}

x:=x+20;{Se incrementa el valor de las columnas}

end;{Final del ciclo for i}

until keypressed;{Final del ciclo for Repita}

   CloseGraph;{Cierra el modo gráfico}
end.
{Final del programa principal}


Bar3D(X1, Y1, X2, Y2, profundidad, tapada);

Dibuja un rectángulo en tercera dimensión entre 2 puntos, X1, Y1 son el punto inicial y X2, Y2 el punto final, profundidad es la distancia desde el borde hacia el interior y tapada es una variable de tipo BOOLEAN que la dibuja con la tapa superior cuando esta en True, y sin ella cuando esta en False. 

X1 = Columna Inicial

Y1 = Fila Inicial

X2 = Columna Final

Y2 = Fila Final

Profundidad = Distancia de el borde hacia el interior

Tapada = Tapa superior si esta en verdadero, sin ella cuando es falso.

barra3d.gif (37430 bytes)

El siguiente ejemplo es similar al ejercicio anterior con la diferencia de que aquí se hace con barras en tercera dimensión:

program Uso_de_Barras_en_3D;
const

   tamano=20;

var

    vector : array[1..tamano] of integer;
    i, j, tempo, x, y : integer;

    Gd, Gm : Integer;

begin{Inicio del programa principal}

GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}

InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);
{Evalua, si la inicialización no fue correcta entonces Termina}

randomize; {Se activa el generador de numeros aleatorios}
repeat
{Este ciclo se repite hasta que el usuario presione una tecla}

x:=10;{Valor inicial de las columnas en el plano cartesiano}
y:=getmaxy-10;
{Valor inicial de las filas en el plano cartesiano}
cleardevice;
{Se limpia la pantalla}
{En el siguiente ciclo se llenan con valores aleatorios entre 0 y 10 las posiciones del vector}
for i:=1 to tamano do vector[i]:=random(tamano);

for i:=1 to tamano do
{Se hace un recorrido desde 1 hasta el tama¤o del vector}

begin {Inicio del ciclo for i}
tempo:=vector[i];
{El valor de la posición es almacendado en la variable tempo}
setcolor(i);
{Se fija un color para cada columna de valores}
setfillstyle(1,i);
{Se fija el estilo y relleno del vector}

for j:=1 to tempo do{se hace un ciclo desde 1 hasta el valor almacenado en la variable tempo}

begin {Inicio del ciclo for j}

bar3d(x,y-j*10,x+15,y-((j*10)+4),10,TopOn);{Pintamos la barra en las  posiciones x1, y1, x2, y2,   con 10 pixels de profundidad, y la opción de tapa superior habilitada.
Para que notes los cambios puedes variar del valor de la profundidad y el de la tapa de TopOn a TopOff.}

delay(5);{Se hace una espera de 5 milisegundos}

end; {Final del ciclo for j}

x:=x+20;{Se incrementa el valor de las columnas}

end;{Final del ciclo for i}

until keypressed;{Final del ciclo for Repita}

   CloseGraph;{Cierra el modo gráfico}
end.
{Final del programa principal}

  Regresar Presione aquí para regresar

Indice Presiona aquí para regresar al índice