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