Bienvenidos

En este blog se publicaran proyectos en c++, les doy la bienvenida y espero sea de ayuda para ustedes este espacio, no olviden comentar!

domingo, 13 de noviembre de 2011

Examen UII Avion C++ y C#

Examen de la unidad 2 de graficacion en los lenguajes C++ y C#
Forma C#

Forma C++
El siguiente  código completo es en c#
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#define ROUND(x) ((int)(x+0.5))
#include "Unit1.h"
#include "Math.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
//EVENTO CLICK DE LA FORMA
void __fastcall TForm1::FormClick(TObject *Sender)
{
   Repaint();limpia la forma al dar clic
   Inicia();//inicia al darle clic a la forma
}
//---------------------------------------------------------------------------
 void TForm1::Inicia()
{
   int grados,cont = 24;
   int Figura[5][2];//coordenadas de los puntos de la figura

   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);//dibuja la figura en el metodo Dibujar()
   grados = 45;//inicializa a 45 grados
   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);//rotacion y movimiento de la figura 
     grados+=25;
   }
   Canvas->Font->Color = clRed;
   Canvas->TextOutA(240,0,"CRASH");//muestra el mensaje 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);//Inicio del dibujo en //el centro
   for(int i = 0; i < 5; i++)
   {
      x2 = Fig[i][0];
      y2 = Fig[i][1];
      Canvas->LineTo(x2+centroX, y2+centroY);//se sigue dibujando
      x1 = x2;//a partir del punto donde se quedo
      y1 = y2;//asignado el ultimo punto a x1 y x2
   }
}

void TForm1::Rotar(int fig[][2],int grados)
{
   float angulo = grados * M_PI /180.0;//conversión a radianes
   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]);
//asigna la figura a un auxiliar FiguraT y modificando su //posicion segun el valor de MatT
      }
   }
   Dibujar(FiguraT);//dibuja la figura al terminar 
}

Codigo C#
El código hace exactamente lo mismo pero cambiando la sintaxis de algunas instrucciones.
También se programa el inicio en el click de la forma


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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;


namespace ExamenUII
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        private void Form1_Click(object sender, EventArgs e)
        {
            Refresh();
            Inicia();


        }


        public void Inicia()
        {
            int grados, cont = 24;
            int[,] Figura = new int[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;
                Thread.Sleep(30);
                Rotar(Figura,grados);
                grados += 25;
            }
            Graphics g = this.CreateGraphics();
            LinearGradientBrush colorizer2 = new LinearGradientBrush(new Point(0, 0), new Point(500, 500), Color.Black, Color.Red);
            g.DrawString("CRASH", new Font("Arial", 20), colorizer2, 240, 10 + 2);
            // Canvas->Font->Color = clRed;
            //Canvas->TextOutA(240,0,"CRASH");
        }




        public void Dibujar(int[,] Fig)
        {
            //SUPONGA: ClientWidth = ClientHeight = 500
            int centroX = this.ClientSize.Width / 2;
            int centroY = this.ClientSize.Height / 2;
            int x1, y1, x2, y2;
            x1 = Fig[2, 0];
            y1 = Fig[2, 1];
            Graphics g = this.CreateGraphics();


            Pen myPen = new Pen(Color.FromArgb(0, 100, 130));
            //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];
                g.DrawLine(myPen, new Point(x1 + centroX, y1 + centroY), new Point(x2 + centroX, y2 + centroY));
                //Line_DDA(x1+centroX, y1+centroY, x2+centroX,     //y2+centroY);
                //Canvas->LineTo(x2+centroX, y2+centroY);
                x1 = x2;
                y1 = y2;
            }
        }


       public void Rotar(int[,] fig,int grados)
{
   double angulo = grados * Math.PI /180.0;
   int[,] FiguraT = new int[5, 2];
   double[,] MatT = new double[2, 2];


   MatT[0,0]=Math.Cos(angulo);    MatT[0,1] =Math.Sin(angulo);
   MatT[1,0]=-Math.Sin(angulo);   MatT[1,1] =Math.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]+=(int)Math.Round(fig[i,k]*MatT[k,j]);
      }
   }
   Dibujar(FiguraT);
}




    }
}
Este es todo el post. Comenten y Hagan sugerencias.
 Gracias!!!

No hay comentarios:

Publicar un comentario