Documente Academic
Documente Profesional
Documente Cultură
POLÍGONO
|Y E S IC A H E R N Á N D E Z |C O M P U TA C IÓ N G R A F IC A
Archivos contenidos:
Filename Location
Ydata.h E:\Programacion\CompGrafica\Poligono\Ydata.h
main_poligono.c E:\Programacion\CompGrafica\Poligono\main_poligono.c
poligono.h E:\Programacion\CompGrafica\Poligono\poligono.h
Color.h E:\Programacion\CompGrafica\Poligono\Color.h
linea_bresenham.h E:\Programacion\CompGrafica\Poligono\linea_bresenham.h
/*
YDA TA .H:
CONTIENE FUNCIONES QUE ME PERMITEN DESPLEGAR MIS DATOS EN EL PROGRAMA
Y UN BONITO ESCUDO DE LA FACULTAD DE INGENIERIA
TODO ESTO POSIBLE GRACIAS A LAS RUTINAS DE ALLEGRO
*/
#include <allegro.h>
/*
Función para mostrar en pantalla mis datos y el escudo de la facultad
*/
void titulo(const char *titulo){
MA I N_POLI GONO:
//VARIABLES GLOBALES:
int t=0;
int main() {
init();
//INICIALIZAMOS VARIABLES
int pos, xi=0,yi=0,x, y; //ESTAS VARIABLES GUARDAN LOS VALORES DADOS EN TIEPO
REAL
//PÒR MEDIO DEL MOUSE Y QUE SIRVEN PARA GENERAR
LOS LADOS DEL POLIGONO
int minx=640,miny=480,maxx=0,maxy=0; //SIRVEN PARA AHORRAR CALCULOS AL
DELIMITAR EL AREA DE BARRIDO
//CONTADORES Y BANDERAS:
int c=0;
}
//EN CASO DE NO TENER DOS PARES, ALMACENAMOS LOS VALORES ACTUALES Y
ESPERAMOS NUEVO PUNTO:
putpixel(screen, x, y, color_val(rojo));
if(x<minx)minx=x;
if(y<miny)miny=y;
if(x>maxx)maxx=x;
if(y>maxy)maxy=y;
c=1;
xi = x; yi = y;
}
while (!key[KEY_ESC]) {}
//HACEMOS UNA PAUSA HASTA QUE NO SE PRESIONE ESC
deinit(); //DEINICIALIZAMOS ALLEGRO
return 0; //TERMIANMOS
}
END_OF_MAIN() //MACRO QUE NECESITA ALLEGRO
void deinit() {
clear_keybuf();
// free_nodes();
/* add other deinitializations here */
}
/*
POL IGONO.H:
CONTIENE TODAS LAS RUTINAS ESTABLECIDAS PARA GENERAR POLIGONOS
APARTIR
DE LOS PUNTOS DADOS EN PANTALLA, DEBIDO A LA DIFUCULTAD DE
CONTROLAR
LISTAS LIGADAS MEDIANTE EL RATON, POR LA VELOCIDAD A LA QUE SE
ACTUALIZA
SE HARA UN EXAMEN POSTERIOR A LA GENERACION DEL POLIGONO
EN BASE AL COLOR DE CADA PIXEL EN EL BUFFER DE LA PANTALLA
*/
//INCLUIMOS LA LIBRERIA DE ALLEGRO
#include "linea_bresenham.h"
//VARIABLES GLOBALES:
do{ //se barre el area en donde se hayan los puntos del poligon de
//arriba hacia abajo y en linea horizontal
openl=0;
/*
YESICA HERNANDEZ HERNANDEZ
COL OR.H
MI PROPIA TABLA DE 8 COLORES:
*/
//000000 negro
#define negro 0
//0000FF azul marino
#define azulM 1
//00CCFF azul claro
#define azulC 2
//00FF00 verde lima
#define verde 3
//663300 cafe
#define cafe 4
//FFFF00 amarillo
#define amarillo 5
//FF0000 rojo
#define rojo 6
//FFFFFF blanco
#define blanco 7
int Tcolor[8]={0,255,52479,65280,6697728,16776960,16711680,16777215};
/*
YESICA HERNANDEZ HERNANDEZ
#include <allegro.h>
//VARIABLES GLOBALES
int loop=0; //NOS AVISA QUE SE HA ENCONTRADO UN LOOP CERRADO AL HACER
INTERSECCION
//DOS LINEAS
//INDICA EL COLOR ACTUAL ESTABLECIDO
int line_color;
int fill_color;
/*
Función para dibujar un eje coordenado de referencia, no se implementa en
el programa de poligono ya que tenemos un eje con referencia absoluta en la
esquina superior izquierda.
*/
void coords(){
hline(screen, 0, 480/2, 640, makecol(123,85, 112));
vline(screen, 640/2, 0, 480, makecol(123,85, 112));
}
/*
Funcion que implementa el algoritmo de Bresenham para dibujar lineas
*/
void lineaX(float x1, float y1, float x2, float y2, int color){
float x, y; //variables para guardar el punto que actualmente de esta
evaluando
float dx, dy; //almacenar los incrementos en x y y de la coordenadas dadas
float incX, incY; //variable auxiliar para calcular cual es el incremento
en x y y
float incMayor, incMenor;//variables auxiliares para calcular el aumento de
p
float p; //parámetro de selección del pixel según la distancia con el mismo
int Pmayor45; //bandera para elegir configuración para curvas mayores
a 45º
int control_ciclo; //variable para generar los puntos pertenecientes a
la linea
int colorP,A,B;
dx = (x2 >= x1) ? (x2 - x1) : (x1 - x2); //hacemos el valor dx sea
absoluto
dy = (y2 >= y1) ? (y2 - y1) : (y1 - y2); //hacemos el valor de dy
sea absoluto
if (Pmayor45) {A=(int)y;B=(int)x;}
else {A=(int)x; B=(int)y;}