Programación Primavera 2010 Librería graphics.h La librería nos permite hacer uso de los gráficos en C para el compilador DEVC++ Esta librería también nos permite tomar datos del ratón, tales como posición, click derecho, click izquierdo, etc. La librería al igual que el manual se puede obtener de la siguiente dirección http://usuarios.multimania.es/charlytospage/dev.htm Proyecto Grafico Para hacer uso del ambiente grafico se debe crear un proyecto con este modo de operación Selecciona, Nuevo->Proyecto Proyecto Grafico En la siguiente ventana selecciona consola grafica Introduce el nombre de tu proyecto Proyecto Grafico En seguida, elige la ruta donde vas a guardar tus archivos. Proyecto base Se crea un proyecto base el cual puedes modificar o sustituir por tu programa Iniciando gráficos Los primero que se debe generar es la ventana de gráficos por medio de la función int initwindow(int width, int height) Esta función crea una ventana del ancho y alto especificado. El ancho y alto se especifica en pixeles Ejemplo int main(void) { /* initialize graphics window at 400 x 300 */ initwindow(400, 300); /* draw a line */ line(0, 0, getmaxx(), getmaxy()); /* clean up */ system("pause"); closegraph(); return 0; } void line(int x1, int y1, int x2, int y2); La función line dibuja una línea de la posición (x1,y1) a la posición (x2,y2) Para seleccionar las posiciones adecuadas debemos considerar que posiciones crecen hacia la derecha y hacia abajo. Ejemplo 2 int main() { initwindow(400,300); //open a 400x300 graphics window line(50,80,350,80); line(50,150,350,150); line(50,220,350,220); line(100,50,100,250); line(200,50,200,250); line(300,50,300,250); waitForLeftMouseClick(); closegraph(); return 0; } //close graphics window Cambiando Estilo de Línea setlinestyle(linestyle, upattern, thickness); Esta función nos permite cambiar el estilo de la línea sus valores son: linestyle: SOLID_LINE DOTTED_LINE ENTER_LINE DASHED_LINE USERBIT_LINE 0 1 2 3 4 Solid line Dotted line Centered line Dashed line User-defined line style Cambiando Estilo de Línea El ancho de la línea se puede seleccionar con estos valores NORM_WIDTH THICK_WIDTH 1 3 1 pixel wide 3 pixels wide El patrón es la forma en la que se pinta la línea. Por ejemplo una línea continua se dibuja con 0xFFFF. Este parámetro es para definir tu propio estilo de línea si no lo utilizas entonces pone el valor default 1. Ejemplo 3 int main() { initwindow(400,300); //open a 400x300 graphics window setlinestyle(SOLID_LINE, 1, THICK_WIDTH); line(50,80,350,80); line(50,150,350,150); line(50,220,350,220); line(100,50,100,250); line(200,50,200,250); line(300,50,300,250); waitForLeftMouseClick(); closegraph(); return 0; } //close graphics window Ejemplo 4 int main() { initwindow(400,300); //open a 400x300 graphics window setlinestyle(CENTER_LINE, 1, NORM_WIDTH); line(50,80,350,80); line(50,150,350,150); line(50,220,350,220); setlinestyle(DASHED_LINE, 1, NORM_WIDTH); line(100,50,100,250); line(200,50,200,250); line(300,50,300,250); waitForLeftMouseClick(); closegraph(); return 0; } //close graphics window Cambiando Estilo de Línea El color de la línea puede ser cambiado por medio de la siguiente función: setcolor(color); Los posibles colores son: Color Color Color BLACK 0 BROWN 6 LIGHTCYAN 11 BLUE 1 LIGHTGRAY 7 LIGHTRED 12 GREEN 2 DARKGRAY 8 LIGHTMAGENTA 13 CYAN 3 LIGHTBLUE 9 YELLOW 14 RED 4 LIGHTGREEN 10 WHITE 15 MAGENTA 5 Ejemplo 5 int main() { initwindow(400,300); //open a 400x300 graphics window setlinestyle(SOLID_LINE, 1, THICK_WIDTH); setcolor(RED); line(50,80,350,80); line(50,150,350,150); line(50,220,350,220); setlinestyle(SOLID_LINE, 1, THICK_WIDTH); setcolor(GREEN); line(100,50,100,250); line(200,50,200,250); line(300,50,300,250); waitForLeftMouseClick(); closegraph(); return 0; } //close graphics window circle(x, y, radius); La función circle dibuja un circulo con centro en (x,y) y radio radius. bar(left, top, right, bottom); La función bar dibuja un rectangulo del punto (left,top) al punto (right, bottom) (left,top) (right, bottom) Ejemplo 5 int main() { initwindow(400,300); //open a 400x300 graphics window setlinestyle(SOLID_LINE, 1, THICK_WIDTH); setcolor(RED); line(50,80,350,80); line(50,150,350,150); line(50,220,350,220); circle(80,200,10); setlinestyle(SOLID_LINE, 1, THICK_WIDTH); setcolor(GREEN); line(100,50,100,250); line(200,50,200,250); line(300,50,300,250); bar(70,100,90,120); waitForLeftMouseClick(); closegraph(); return 0; } //close graphics window putpixel(x, y, color); Esta función nos permite dibujar un pixel en la posición (x,y) y del color seleccionado getmaxx y getmaxy nos permiten encontrar los máximos valores de (x,y) para la ventana de gráficos. Ejemplo 5 #include <graphics.h> #include <stdlib.h> #define PIXEL_COUNT 10000 void waitForLeftMouseClick(); int main() { int i,x,y,color,maxx,maxy,maxcolor; initwindow(400,300); //open a 400x300 graphics window maxx = getmaxx()+1; maxy = getmaxy()+1; maxcolor = getmaxcolor()+1; for (i=0; i<PIXEL_COUNT; i++) { x = rand() % maxx; y = rand() % maxy; color = rand() % maxcolor; putpixel(x, y, color); } waitForLeftMouseClick(); closegraph(); //close graphics window return 0; } Ejemplo: grafica del seno y coseno float seno(float x){ float serie = x, fact = 1, pot = x; int signo = -1; for(float i = 3; i <=40 ; i +=2){ fact *= (i-1)*i; pot *= x*x; serie += signo*pot/fact; signo = -signo; } return serie; } float coseno(float x){ float serie = 1, fact = 1, pot = 1; int signo = -1; for(float i = 2; i <=40 ; i +=2){ fact *= (i-1)*i; pot *= x*x; serie += signo*pot/fact; signo = -signo; } return serie; } Ejemplo: grafica del seno y coseno #include <graphics.h> #include <stdlib.h> #include <math.h> void waitForLeftMouseClick(); float coseno(float); float seno(float); main(){ float x, y1, y2; initwindow(300,310); //ventana grafica de 400x310 pixeles for(x=0; x <=300; x+=0.1){ y1 = -150*coseno(x*2*M_PI/300)+150; putpixel(x, y1, WHITE); // marca un pixel en blanco y2 = -150*seno(x*2*M_PI/300)+150; putpixel(x, y2, YELLOW); //marca un pixel en amarillo } waitForLeftMouseClick(); closegraph(); // Cierra la ventana gráfica } Ejemplo: grafica del seno y coseno #include <graphics.h> #include <stdlib.h> #include <math.h> void waitForLeftMouseClick(); float coseno(float); float seno(float); main(){ float x, y1, y2; initwindow(300,310); //ventana grafica de 400x310 pixeles for(x=0; x <=300; x++){ y1 = -150*coseno(x*2*M_PI/300)+150; putpixel(x, y1, WHITE); // marca un pixel en blanco y2 = -150*seno(x*2*M_PI/300)+150; putpixel(x, y2, YELLOW); //marca un pixel en amarillo } waitForLeftMouseClick(); closegraph(); // Cierra la ventana gráfica }