GRAFICACION

download GRAFICACION

of 12

description

graficacion

Transcript of GRAFICACION

  • CONCEPTOS BSICOS DE GRAFICACIN

    Tal como un artista selecciona diversos medios para representar sus pinturas,los

    programadores, escogen un modo y formato especial para habilitar el monitor para

    graficar. Cada modo proporciona ciertas caractersticas como la resolucin, nmero

    posible de colores, modo texto o modo grfico y otros elementos donde cada modo

    requiere de cierto equipo (hardware).

    Resolucin-Las imgenes grficas mostradas en un monitor de computadora se componen depequeos puntos llamados pxeles, los cuales estn distribuidos en la pantalla en filas; existe unacantidad especfica de filas y cada fila tiene una cantidad especfica de pxeles. La cantidad depxeles usada en la pantalla se conoce como resolucin. Cada modo grfico tiene unaresolucinparticular.

    Inicializar el monitor en modo grfico-Para habilitar el monitor en modo grfico y utilizar sus pxelesy funciones de grficos, es necesario incluir el encabezado #include que contiene lasdeclaraciones y funciones relacionadas con graficacin e inicializar el monitor en modo grfico yutilizar sus pxeles con la funcin initgraph().

    La funcin initgraph()-Una vez declaradas las variables monitor y modo que controlarn laresolucin identificando el tipo de pantalla o monitor y su modode operacin respectivamente, seutiliza la funcin initgraph() para habilitar elmonitor seleccionado en modo grfico. La funcininitgraph() tiene 3 parmetros o argumentos:

    1) La variable que identifica el monitor.

    2) El modo de operacin grfico.

    3) Subdirectorio que contiene los controladores de los monitores (archivos con extensin BGI) y losarchivos con los tipos de letra.

    Uso de coordenadas-Una vez que se inicializa el monitor en modo grfico, las coordenadas tienenal pxel como unidad de medida. La funcin getmaxx() calcula la cantidad de pxeles por rengln yla funcin getmaxy() calcula la cantidad de renglones de la pantalla. Las funciones de grficostienen como estndar el orden de manejo de coordenadas como columna, rengln; es decir,primero se anota la columna y despus el rengln para posicionarse en

  • dicha coordenada. Cabedestacar que el conteo de columnas y renglones inicia partiendo de la esquina superior izquierdadel monitor

    2

    Para realizar grficos en C++ necesitamos poner el sistema en modo grfico. Para ello debemos incluir a nuestro programa la biblioteca de grficos GRAPHICS.H

    #include

    Para inicializar el modo grfico se utiliza la funcin initgraph() y para detenerlo la funcin closegraph().

    A la funcin initgraph se le deben pasar 3 argumentos que permitirn detectar de forma automtica la placa de video y fijar el modo de video ms alto posible:

    int driver=DETECT, modo;

    initgraph(&driver,&modo,C:\\TC\\BGI);

    El primer parmetro (&driver) es asignado a DETECT, por la tanto la funcin detectgraph() es llamada, y un dispositivo y modo grfico (segundo parmetro) apropiados sern seleccionados.

    El tercer parmetro especifica el directorio donde los dispositivos grficos estn localizados.

    Si la funcin initgraph() falla, puede interceptarse un cdigo de error e informar al usuario de dicho problema:

    if (graphresult()!= grOk)

    {

    cout

  • Generalmente al iniciar el modo grfico se dispone de una resolucin de 640x480. Es decir disponemos de 640 pixeles en el eje x y 480 pixeles enel eje y.

    Establecer colores

    Para seleccionar el color de fondo en modo grafico debemos utilizar la funcin setbkcolor() y para establecer el color de dibujo setcolor(). Para limpiar la pantalla en modo grfico se utiliza la funcin cleardevice() que dejar la pantalla con el color establecido en setbkcolor().

    Funciones ms utilizadas:

    rectangle (int X1, int Y1, int X2, int Y2); Dibuja un rectngulo sin relleno en la pantalla marcado por los puntos

    (X1, Y1) y (X2, Y2), donde X1 es el extremo izquierdo del rectngulo, Y1 es el extremo superior, X2 es el extremo derecho e Y2 el extremo inferior del rectngulo.

    circle (int X, int Y, int radio);

    Dibuja un circulo (cuyo tamao de radio est dado por la variable radio) en la pantalla con centro en los puntos (X, Y).

    elve un valor entre -1 y -16.

    Finalizacin del modo grfico

    closegraph( );

    Cierra el modo grfico y nos devuelve al modo texto.

    restorecrtmode( );

  • Reestablece el modo de video original ( anterior a initgraph ).

    /* Inicializacin del modo grfico. */

    #include

    main() /* Inicializa y finaliza el modo grfico. */

    {

    int tarjeta, modo, error;

    detectgraph(&tarjeta,&modo);

    initgraph(&tarjeta,&modo,"C:\\TC\\BGI");

    error=graphresult( );

    if (error)

    {

    printf("%s",grapherrormsg(error));

    }

    else

    {

    getch( );

    closegraph( );

    }

    }

    Introduccin bsica de manejo de grficos.Los grficos no son parte integral del lenguaje c sin embargo existen libreras para crear grficosen c. La ms

  • comn y fcil de manejar es la BGI de borland, esta incluye la librera graphics y losmanejadores de video. Para trabajar en modo grafico se debe contar con los manejadores detarjetas de video, se deber incluir su ruta al inicializar el modo grfico con initgraph.Para que el compilador pueda aceptarla librera de grficos es necesario configurarlo. En borland cesto se hace con el target expert . Se debe recordar que las funciones de grficos funcionen en

    MS_DOS. Para activar el target expert se tiene que obtener el men contextual del

    editor.(Haciendo clic derecho sobre el cdigo fuente). Luego se debe elegir una aplicacin (.EXE),

    Dos Estndar y palomear la BGI. En versiones ms antiguas, se tiene que ir al men de opciones

    y luego al men de linkery all seleccionar graphics. Tambin es buena idea tener las rutas de laslibreras y de los archivos de inclusin con sus rutas absolutas de acuerdo a la instalacin delcompilador. Cuando se elige la configuracin automtica haciendo gdriver = DETECT, se tendr lamejor resolucin disponible para la tarjeta grfica. En las computadoras con una tarjeta Sper VGA. Esto ser una resolucin de 480 X 640 pixeles y 16 colores.

    En el modo grfico existe una enorme cantidad de funciones que realizan desde la tarea mas sencilla como es pintar un pxel, hasta la tarea mas compleja como pudiera ser dibujar un carcter por medio de trazos.

    libreria

    Para trabajar el modo grfico es necesario incluir la librera graphics.h como hacer uso de la BGI (Borlan Graphics Interphase)

    Para usar cualquier funcin es necesario colocar el adaptador de video en modo grafico y esto se logra a travs de la funcin initgraph(); y al terminares necesario regresar al modo original a travs de la funcin closegraph();

    Para iniciar un programa en ambiente grfico es recomendable correr una subrutina de inicializacin de grficos y deteccin de errores.

    Algunos ejemplos de las funciones que se pueden encontrar en la librera de

  • grphics.h son:

    Line(); circle(); arc(); elipse();rectangle(); ottextxy(); putpixel();

    Para saber mas de las funciones de la librera de grficos lo pueden buscar enel ndice de turbo c

    NOTA: Para dar de alta en tu computadora el modo de grficos tienes que hacer los siguientes pasos: OPTIONS ->LINKER->LIBRARIE->seleccionar GRAPHICS LIBRARY

    EJEMPLO:

    #include

    #include

    #include

    int main(void)

    {

    clrscr();

    double fx;

    int graphdriver=DETECT,graphmode;

    initgraph(&graphdriver,&graphmode,"..\\bgi");

    outtextxy(30,30,GRAFICACION DE SENO );

    setbkcolor(RED);

    for (int x=0;x

  • line(310,100,310,400);

    line(100,240,500,240);

    getch();

    closegraph();

    return 0;

    }

    Graficado de puntosPutPixel(X,Y,CdigoDeColor);Grafica, coloca un pixel en las coordenadas (X,Y) especificadas con el colorindicado por el cdigo.Las coordenadas debern estar dentro del intervalo de coordenadasmnimas y mximas correspondientes al plano seleccionado.Graficado de LneasLine(X1,Y1,X2,Y2);Traza una lnea de las coordenadas (X1,Y1) a las coordenadas (X2,Y2).Utilizando el color y el estilo que estn activos. As como puede modificar elcolor, tambin puede modificar el estilo de trazado de lneas.LineRel(DeltaX,DeltaY);Traza una lnea desde la posicin actual del cursor hasta las coordenadasresultantes de incrementar X en DeltaX y Y en DeltaY.LineTo(X,Y);Traza una lnea desde la posicin actual del cursor hasta las coordenadas(x,Y);En los tres casos X y Y son datos o variables de tipo entero.

    Graficacin de funciones matemticas.

    La graficacin de funciones matemticas implica generalmente dos problemas:

    - La existencia explcita de ejes de graficacin diferentes de los propios de pant.

    - La necesidad de una escala para compatibilizar las medidas.

    Adems al ser los ejes simples lneas horizontales o verticales, si bien podemos graficarlo

  • con putpixel( ), C dispone de una funcin que permite trazar directamente una

    lnea:

    line ( X1, Y1, X2, Y2 );

    Donde X1, Y1 son las coordenadas de un extremo de la lnea, y X2, Y2 las del otro extremo.

    Todos estos parmetros son int por las mismas razones que invocamos en la

    funcin putpixel( ): no pueden existir fracciones de pxel.

    Sin embargo a diferencia de putpixel( ) carece de un parmetro de color, por lo cual

    deberemos recurrir a una instruccin adicional para establecer el mismo:

    setcolor(ColorFrente)

    setbkcolor(ColorFondo)

    Siendo Color un valor entero que puede variar entre 0 y 15. A modo de referencia estos

    son los colores, sus valores numricos y las constantes que los representan:

    Color Valor Fondo Frente

    ---------------------------------------------------------------------------------------

    BLACK 0 SI SI

    BLUE 1 SI SI

    GREEN 2 SI SI

    CYAN 3 SI SI

    RED 4 SI SI

  • MAGENTA 5 SI SI

    BROWN 6 SI SI

    LIGHTGRAY 7 SI SI

    DARKGRAY 8 NO SI

    LIGHTBLUE 9 NO SI

    LIGHTGREEN 10 NO SI

    LIGHTCYAN 11 NO SI

    LIGHTRED 12 NO SI

    LIGHTMAGENTA 13 NO SI

    YELLOW 14 NO SI

    WHITE 15 NO SI

    Si no se establece un color para el fondo, el compilador adopta el Black por defecto.

    Los colores pueden escribirse directamente, lo cual resulta muy prctico, porejemplo:

    setcolor(LIGHTGREEN)

    setcolor(YELLOW)

    ejemplo:

    Dibujar un par de ejes coordenados.

    ----------------------------------------------------------------- */

    #include

    #include

    #include

  • #include

    #include

    #include

    void ModoGrafico ( );

    void ModoTexto ( );

    // -----------------------------------------------------------------

    void main()

    {

    int XizqEjeH = 50;

    int XderEjeH = 550;

    int YEjeH = 300;

    int XEjeV = 50;

    int YinfEjeV = 50;

    int YsupEjeV = 300;

    int ColorEjes = LIGHTCYAN;

    ModoGrafico();

    setcolor(ColorEjes);

    line(XizqEjeH,YEjeH,XderEjeH,YEjeH);

    line(XEjeV,YinfEjeV,XEjeV,YsupEjeV);

    getch();

    ModoTexto();

    }

  • // -----------------------------------------------------------------

    Graficacin de funciones exponenciales.

    Las funciones exponenciales resultan de uso muy comn en ingeniera ya que muchos fenmenos fsicos responden de forma exponencial. Si el lector no est muy versado en tales funciones no debe albergar ningn temor: nosotrosle proporcionaremos las herramientas matemticas y Ud. slo se limitar al aspecto de la graficacin.

    Para el ejemplo que viene a continuacin utilizaremos una exponencial creciente que

    arranca de un valor inicial Vini y llega hasta un valor final Vfin. Su expresin matem-

    tica es la siguiente:

    F(t) = Vini + (Vfin Vini)*(1 exp(-t / To))}

    To es lo que se denomina la constante de crecimiento y es un dato de la ecuacin.

    Es el valor de la variable independiente para el cual la funcin alcanza el 63,2% de su

    recorrido de amplitud. No nos preocupemos por este detalle.

    t es la variable independiente, la cual haremos que vare entre un valor inicial Tini y

    un valor final Tfin, por ejemplo entre 0 y 6 veces To.

    Esta forma de trabajar con variables para los valores iniciales y finales de ciertos

    parmetros de la funcin, es muy conveniente porque nos permite modificar con facilidad

    las condiciones de graficacin y obtener elementos particulares que nos

  • interese.

    Por supuesto todo debe ajustarse automticamente para que no ocurran distorsiones.

    Por ejemplo:

    double EscGrafH = (double)(XderEjeH-XizqEjeH)/(double)(Tfin-Tini);

    double EscGrafV = (double)(YsupEjeV-YinfEjeV)/(double)(Vfin-Vini);

    Ajustan automticamente las escalas al modificar los valores de cada extreme.

    El lazo de graficacin en s:

    for(t =Tini; t