domingo, 27 de noviembre de 2011

examen de la unidad 2


//---------------------------------------------------------------------------
#define ROUND(x) ((int)(x+0.5))

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Math.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void TForm1::Inicia()
{
   int grados, cont = 24;
   int Figura[5][2];

   Figura[0][0]= 5;  Figura[0][1]= -5;
   Figura[1][0]= 5;  Figura[1][1]= 20;
   Figura[2][0]= 1;  Figura[2][1]= 1;
   Figura[3][0]= 10; Figura[3][1]= 1;
   Figura[4][0]= 5;  Figura[4][1]= 20;

   Dibujar(Figura);
   grados = 45;
   for(int i = 0;  i < cont; i++)
   {
     Figura[0][0]+= 10; //5;
     Figura[1][0]+= 10; //5;
     Figura[2][0]+= 10; //5;
     Figura[3][0]+= 10; //5;
     Figura[4][0]+= 10; //5;
     Sleep(30);
     Rotar(Figura,grados);
     grados+=25;
   }
   Canvas->Font->Color = clRed;
   Canvas->TextOutA(240,0,"CRASH");
}

//---------------------------------------------------------------------------
void TForm1::Dibujar(int Fig[][2])
{
//SUPONGA: ClientWidth = ClientHeight = 500
   int centroX = ClientWidth/2;
   int centroY = ClientHeight/2;
   int x1,y1,x2,y2;
   x1 = Fig[2][0];
   y1 = Fig[2][1];
   Canvas->Pen->Color = RGB(0,100,130);
   Canvas->MoveTo(x1+centroX, y1+centroY);
   for(int i = 0; i < 5; i++)
   {
      x2 = Fig[i][0];
      y2 = Fig[i][1];
      //Line_DDA(x1+centroX, y1+centroY, x2+centroX, //y2+centroY);

      Canvas->LineTo(x2+centroX, y2+centroY);
      x1 = x2;
      y1 = y2;
   }
}

//---------------------------------------------------------------------------
void TForm1::Rotar(int fig[][2],int grados)
{
   float angulo = grados * M_PI /180.0;
   int FiguraT[5][2];
   float MatT[2][2];

   MatT[0][0]= cos(angulo);         MatT[0][1] = sin(angulo);
   MatT[1][0]= -sin(angulo);        MatT[1][1] = cos(angulo);
   for(int i = 0;i < 5; i++)
   {
      for(int j = 0; j < 2; j++)
      {
          FiguraT[i][j]= 0;
          for(int k = 0; k < 2; k++)
            FiguraT[i][j]+= ROUND(fig[i][k]*MatT[k][j]);
      }
   }
   Dibujar(FiguraT);
}

//---------------------------------------------------------------------------
void __fastcall TForm1::FormClick(TObject *Sender)
{
   Repaint();
   Inicia();

}
//-------------------------

circulo y linea dda


#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::PaintBox1MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
          Edit2->Text = x2 = X;
          Edit4->Text = y2 = Y;

          if(RadioButton1->Checked)
          {
             PaintBox1->Repaint();
             g->Linea_DDA(x1, y1, x2, y2);

          }

          if(RadioButton2->Checked)
          {
             PaintBox1->Repaint();
             g->Circulo_X_Segmento(xc, yc, x2 - x1);
          }

          if(RadioButton3->Checked)
          {

          }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PaintBox1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    Edit1->Text = x1 = X;
    Edit3->Text = y1 = Y;

    Edit5->Text = xc = X;
    Edit6->Text = yc = Y;
    Edit7->Text = xc - x1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
                g = new Graficos(PaintBox1->Canvas);

}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
        if(RadioButton1->Checked)
        {
           Edit1->Enabled = true;
           Edit2->Enabled = true;
           Edit3->Enabled = true;
           Edit4->Enabled = true;
           Edit5->Enabled= false;
           Edit6->Enabled = false;
           Edit7->Enabled = false;
           Button1->Enabled = false;
           //Button2->Enabled = false;
           Button3->Enabled = false;
           Button4->Enabled = false;
           Button5->Enabled = false;
           Button6->Enabled = false;
           //Edit8->Enabled = false;
           //Edit9->Enabled = false;
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
        if(RadioButton2->Checked)
        {
           Edit1->Enabled = false;
           Edit2->Enabled = false;
           Edit3->Enabled = false;
           Edit4->Enabled = false;
           Edit5->Enabled= true;
           Edit6->Enabled = true;
           Edit7->Enabled = true;
           Button1->Enabled = false;
           //Button2->Enabled = false;
           Button3->Enabled = false;
           Button4->Enabled = false;
           Button5->Enabled = false;
           Button6->Enabled = false;
           //Edit8->Enabled = false;
           //Edit9->Enabled = false;
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton3Click(TObject *Sender)
{
        if(RadioButton3->Checked)
        {
           Edit1->Enabled = false;
           Edit2->Enabled = false;
           Edit3->Enabled = false;
           Edit4->Enabled = false;
           Edit5->Enabled= false;
           Edit6->Enabled = false;
           Edit7->Enabled = false;
           Button1->Enabled = true;
           //Button2->Enabled = true;
           Button3->Enabled = true;
           Button4->Enabled = true;
           Button5->Enabled = true;
           Button6->Enabled = true;
           //Edit8->Enabled = true;
           //Edit9->Enabled = true;
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
     PaintBox1->Repaint();
     xcW = PaintBox1->ClientWidth/2;
     ycH = PaintBox1->ClientHeight/2;
     g->Espiral_1(xcW, ycH);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
     PaintBox1->Repaint();
     xcW = PaintBox1->ClientWidth/2;
     ycH = PaintBox1->ClientHeight/2;
     g->Espiral_2(xcW, ycH);
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button5Click(TObject *Sender)
{
     PaintBox1->Repaint();
     xcW = PaintBox1->ClientWidth/2;
     ycH = PaintBox1->ClientHeight/2;
     val = ComboBox1->Text.ToInt();
     g->Efecto_Espiral_1(xcW, ycH, val);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)
{
     PaintBox1->Repaint();
     xcW = PaintBox1->ClientWidth/2;
     ycH = PaintBox1->ClientHeight/2;
     rad = ComboBox3->Text.ToDouble();
     th = ComboBox2->Text.ToDouble();
     g->Efecto_Espiral_2(xcW, ycH, th, rad);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
     PaintBox1->Repaint();
     xcW = PaintBox1->ClientWidth/2;
     ycH = PaintBox1->ClientHeight/2;
     val2 = ComboBox4->Text.ToInt();
     radi = ComboBox5->Text.ToDouble();
     g->Efecto_1(xcW, ycH, val2, radi);
}
//---------------------------------------------------------------------------

fractales



#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

//Esta funcion dibujara solo 1 triangulo y entonces empezara la funcion de recursividad a si mismo
void TForm1::drawSierpinski(float x1, float y1, float x2, float y2, float x3, float y3)
{
        //Aqui dibujamos las 3 lineas del triangulo, uniendo los 3 puntos para generar lineas
        this->Canvas->Pen->Color=(TColor)random(65000);
        this->Canvas->MoveTo(x1,y1);
        this->Canvas->LineTo(x2,y2);
        this->Canvas->MoveTo(x2,y2);
        this->Canvas->LineTo(x3,y3);
        this->Canvas->MoveTo(x3,y3);
        this->Canvas->LineTo(x1,y1);
        //Llamamos a la funcion de recursividad y pintara el resto de los tringulos, las 3 esquinas de triangulo son simempre el centro de su posicion
        subTriangle
        (
            1, //Esto representa la primer recursicion
            (x1 + x2) / 2, //coordenada x de la primera esquina
            (y1 + y2) / 2, //coordenada y de la primera esquina
            (x1 + x3) / 2, //coordenada x de la segunda esquina
            (y1 + y3) / 2, //coordenada y de la segunda esquina
            (x2 + x3) / 2, //coordenada x de la tercera esquina
            (y2 + y3) / 2  //coordenada y de la tercera esquina
        );
}
//La funcion de recursividad subtriangulo pintara todo lo que esta dentro del tringulo mayor a este
void TForm1::subTriangle(int n, float x1, float y1, float x2, float y2, float x3, float y3)
{
        Sleep(10);
        //Dibujamos los 3 lados del subtriangulo
        this->Canvas->MoveTo(x1,y1);
        this->Canvas->LineTo(x2,y2);
        this->Canvas->MoveTo(x2,y2);
        this->Canvas->LineTo(x3,y3);
        this->Canvas->MoveTo(x3,y3);
        this->Canvas->LineTo(x1,y1);
        //Llamadas a si mismo 3 veces con nuevas esquinas,pero solo si el actual numero de recurrencias es menor que la profundidad maxima
        if(n < depth)
        {
        //Triangulo mas pequeño #1
           subTriangle
           (
            n+1, //numero de recurrencias para la siguiente llamada con aumento de 1
            (x1 + x2) / 2 + (x2 - x3) / 2, //coordenada x de la primera esquina
            (y1 + y2) / 2 + (y2 - y3) / 2, //coordenada y de la primera esquina
            (x1 + x2) / 2 + (x1 - x3) / 2, //coordenada x de la segunda esquina
            (y1 + y2) / 2 + (y1 - y3) / 2, //coordenada y de la segunda esquina
            (x1 + x2) / 2, //coordendaa x de la tercera esquina
            (y1 + y2) / 2  //coordenada y de la tercera esquina
        );
        //Triangulo mas pequeño #2
        subTriangle
        (
            n+1, //numero de recurrencias para la siguiente llamada con aumento de 1
            (x3 + x2) / 2 + (x2 - x1) / 2,
            (y3 + y2) / 2 + (y2 - y1) / 2,
            (x3 + x2) / 2 + (x3 - x1) / 2,
            (y3 + y2) / 2 + (y3 - y1) / 2,
            (x3 + x2) / 2,
            (y3 + y2) / 2
        );
        //Triangulo mas pequeño #3
        subTriangle
        (
            n+1, //numero de recurrencias para la siguiente llamada con aumento de 1
            (x1 + x3) / 2 + (x3 - x2) / 2,
            (y1 + y3) / 2 + (y3 - y2) / 2,
            (x1 + x3) / 2 + (x1 - x2) / 2,
            (y1 + y3) / 2 + (y1 - y2) / 2,
            (x1 + x3) / 2,
            (y1 + y3) / 2
        );
    }
}




void __fastcall TForm1::Button1Click(TObject *Sender)
{
        this->Repaint();
        Sleep(1);
        Button1->Enabled=false;
        //Llamamos a la función de Sierpinski (funciona con cualquier esquina dentro de la pantalla)
        //Asignamos las coordenadas del tringulo principal "el mas grande"
        drawSierpinski(10, h - 10, w - 10, h - 10, w / 2, 10);
        Button1->Enabled=true;
        Button1->SetFocus();

}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
        depth=7;
        this->ClientWidth=640;
        this->ClientHeight=480;
        w=this->ClientWidth;
        h=this->ClientHeight;    
}
//---------------------------------------------------------------------------

Manipulacion de colores y pixeles

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
     TColor color,r;
     for(int i=0;i<Image1->Width;i++)
     {
       for(int j=0;j<Image1->Height;j++)
       {
          color= Image1->Canvas->Pixels[i][j];
          r=color & 255;
          Image2->Canvas->Pixels[i][j]=r;

       }
     }

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    TColor color,r;
     for(int i=0;i<Image1->Width;i++)
     {
       for(int j=0;j<Image1->Height;j++)
       {
          color= Image1->Canvas->Pixels[i][j];
          r=color & 0xff0000;
          Image2->Canvas->Pixels[i][j]=r;

       }
     }

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
    TColor color,r;
     for(int i=0;i<Image1->Width;i++)
     {
       for(int j=0;j<Image1->Height;j++)
       {
          color= Image1->Canvas->Pixels[i][j];
          r=color & 0x000ff00;
          Image2->Canvas->Pixels[i][j]=r;

       }
     }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
     Image2->CleanupInstance();
     for(int i=0;i<Image1->Width;i++)
     {
       for(int j=0;j<Image1->Height;j++)
       {
Image2->Canvas->Pixels[Image2->Width -i][Image2->Height -j]=Image1->Canvas->Pixels[i][j];

       }
     }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
   Label2->Caption=X ;
    Label4->Caption= Y;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
    Label2->Caption= X;
    Label4->Caption=Y;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image2MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
    //Label2->Caption=X ;
    //Label4->Caption= Y;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button5Click(TObject *Sender)
{    Image2->CleanupInstance();
      Image2->Height=Image1->Width -3;
      Image2->Width=Image1->Height-3;
       for(int i=0;i<Image1->Width;i++)
     {
       for(int j=0;j<Image1->Height;j++)
       {
          Image2->Canvas->Pixels[j][i]=Image1->Canvas->Pixels[i][j];

       }
     }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)
{
     Image2->CleanupInstance();
      /*Image2->Height=Image1->Width -3;
        Image2->Width=Image1->Height-3;
       for(int i=0;i<Image1->Width;i++)
     {
       for(int j=0;j<Image1->Height;j++)
       {
           Image2->Canvas->Pixels[i][j]=Image1->Canvas->Pixels[Image1->Height-j][Image1->Width -i];

       } */ for(int x = 0; x < Image1->Width; x++)
            {
            for(int y =0; y < Image1->Height; y++)
             {
               int w= -1*(x-Image1->Width);
               Image2->Canvas->Pixels[w][y] = Image1->Canvas->Pixels[x][y];
             }
             }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button7Click(TObject *Sender)
{
      TColor pixelColor, Verde;
    for(int y=0; y<Image1->Height; y++)
     for(int x=0; x<Image1->Width; x++)
      {
        pixelColor= Image1->Canvas->Pixels[x][y];
        //Verde = pixelColor & 0x0000FF00;
          Verde = pixelColor | 0x0000FF00;

        Image2->Canvas->Pixels[x][y] ^= Verde;
      }
}