//---------------------------------------------------------------
//  Graficos.c
//---------------------------------------------------------------
//  Esau R.O
//---------------------------------------------------------------
#include "graficos.h"
#include "fractal.h"

int gzn_color[16][3] = {{   0,  0,  0},
            {  10,  8, 23},
            {  13, 16, 36},
            {  15, 18, 41},
            {  17, 21, 46},
            {  18, 23, 49},
            {  20, 26, 50},
            {  22, 29, 52},
            {  24, 35, 55},
            {  22, 40, 58},
            {  20, 45, 60},
            {  17, 46, 61},
            {  16, 47, 62},
            {  25, 52, 62},
            {  38, 58, 63},
            {  63, 63, 63}};

int gn_GrillaActiva = FALSE;
int gn_Grilla_x;
int gn_Grilla_y;

extern double gf_x1;
extern double gf_y1;
extern double gf_x2;
extern double gf_y2;
extern double gn_pasos;


void  CambiarColoresPaleta (int opc)
{
  struct palettetype pal;
  int k;

  getpalette(&pal);

  if (pal.size == 16)
  {
    switch (opc)
    {
      case EX_C_GRIS:
        for (k = 0; k < 16; k++)
        {
          setrgbpalette (pal.colors[k], gzn_color[k][1], gzn_color[k][1], gzn_color[k][1]);
        }
        break;

      case EX_C_AZUL:
        for (k = 0; k < 16; k++)
        {
          setrgbpalette (pal.colors[k], gzn_color[k][0], gzn_color[k][1], gzn_color[k][2]);
        }
        break;

      case EX_C_ROJO:
        for (k = 0; k < 16; k++)
        {
          setrgbpalette (pal.colors[k], gzn_color[k][2], k * 4, gzn_color[k][0]);
        }
        break;

      case EX_C_VERDE:
        for (k = 0; k < 16; k++)
        {
          setrgbpalette (pal.colors[k], k * 4, gzn_color[k][2], gzn_color[k][0]);
        }
        break;

      default:
        break;
    }
  }
}


int   InicializarGraficos()
{
  int ControladorGrafico;
  int ModoGrafico;
  int CodigoError = 0;

  ControladorGrafico = VGA;
  ModoGrafico = VGAHI;

  initgraph (& ControladorGrafico, & ModoGrafico, RUTA_BGI);

  CodigoError = graphresult();

  if (CodigoError != grOk)
  {
    printf ("\n No se encontro la carpeta del controlador BGI\n o no se pudo inicializar correctamente adaptador VGA.");
    printf ("\n %s\n", grapherrormsg (CodigoError));
    return FALSE;
  }
  else
  {
    CambiarColoresPaleta (EX_C_AZUL);
    return TRUE;
  }
}


void  Cuadriculado()
{
  setcolor (7);

  line (0, 0, 639, 0);
  line (0, 119, 639, 119);
  line (0, 239, 639, 239);
  line (0, 359, 639, 359);
  line (0, 479, 639, 479);

  line (0, 0, 0, 479);
  line (159, 0, 159, 479);
  line (319, 0, 319, 479);
  line (479, 0, 479, 479);
  line (639, 0, 639, 479);
}


void  MiniCuadriculado()
{
  int x1, y1, x2, y2;

  setcolor (14);

  if (gn_Grilla_x == 1)
  {
    x1 = 0;
    x2 = 319;
  }
  else
  {
    x1 = 160 * (gn_Grilla_x - 1) - 1;
    x2 = 160 * (gn_Grilla_x + 1) - 1;
  }

  if (gn_Grilla_y == 3)
  {
    y1 = 239;
    y2 = 0;
  }
  else
  {
    y1 = 479 - 120 * (gn_Grilla_y - 1);
    y2 = 479 - 120 * (gn_Grilla_y + 1);
  }

  line (x1, y1, x1, y2);
  line (x1, y2, x2, y2);
  line (x2, y2, x2, y1);
  line (x2, y1, x1, y1);
}


int   DibujarGrilla()
{
  if (gn_GrillaActiva == FALSE)
  {
    Cuadriculado();

    gn_Grilla_x = 1;
    gn_Grilla_y = 1;

    MiniCuadriculado();

    gn_GrillaActiva = TRUE;

    return TRUE;
  }

  return FALSE;
}


int   GrillaIzquierda()
{
  if ((gn_GrillaActiva == TRUE) && (gn_Grilla_x > 1))
  {
    -- gn_Grilla_x;
    Cuadriculado();
    MiniCuadriculado();
    return TRUE;
  }

  return FALSE;
}


int   GrillaDerecha()
{
  if ((gn_GrillaActiva == TRUE) && (gn_Grilla_x < EX_MAX_GRILLA))
  {
    ++ gn_Grilla_x;
    Cuadriculado();
    MiniCuadriculado();
    return TRUE;
  }

  return FALSE;
}


int   GrillaArriba()
{
  if ((gn_GrillaActiva == TRUE) && (gn_Grilla_y < EX_MAX_GRILLA))
  {
    ++ gn_Grilla_y;
    Cuadriculado();
    MiniCuadriculado();
    return TRUE;
  }

  return FALSE;
}


int   GrillaAbajo()
{
  if ((gn_GrillaActiva == TRUE) && (gn_Grilla_y > 1))
  {
    -- gn_Grilla_y;
    Cuadriculado();
    MiniCuadriculado();
    return TRUE;
  }

  return FALSE;
}


int   Zoom (int (* fnc_fractal)(double, double, double, double, int))
{
  double dx, dy;

  if (gn_GrillaActiva == FALSE)
  {
    return FALSE;
  }

  dx = (gf_x2 - gf_x1) / 4;
  dy = (gf_y2 - gf_y1) / 4;

  gf_x1 = gf_x1 + (gn_Grilla_x - 1) * dx;
  gf_y1 = gf_y1 + (gn_Grilla_y - 1) * dy;

  gf_x2 = gf_x1 + 2 * dx;
  gf_y2 = gf_y1 + 2 * dy;

  gn_GrillaActiva = FALSE;

  if (gn_pasos < 10240)
  {
    gn_pasos += 256;
  }

  return ((* fnc_fractal) (gf_x1, gf_y1, gf_x2, gf_y2, gn_pasos));
}
Hosted by www.Geocities.ws

1