Blog hecho para la Materia de Graficacion de la carrera de ing. en sistemas computacionales del Instituto Tecnologico de la Laguna. Las publicaciones de este blog seran conforme vallamos avanzando en el curso, asi que se publicara codigo e imagenes para que sean de provecho para todos que quieran aprender.
domingo, 30 de octubre de 2011
Transformaciones bidimensionales
A la hora de graficar, el eje X se muestra como en plano cartesiano pero el eje Y esta invertido, lo cual quiere decir que conforme vaya aumentando el valor de Y este va hacie el fondo de la ventana.
A continuacion se muestra el codigo para invertir el eje Y, utilizando la clase VentanaPuerto, la cual tambien
no sirve a la hora de manejar las coordenadas mundiales y las coordenadas de los dispositivos.
class VentanaPuerto
{
private:
float xWmin, yWmin, xWmax, yWmax;
int xPvmin, yPvmin, xPvmax, yPvmax;
public:
void Ventana(float xW1, float yW1, float xW2, float yW2);
void Puerto_Vision(int xPv1, int yPv1, int xPv2, int yPv2);
void Mapeo(float x1, float y1, int *xt1, int *yt1, int L, int M);
};
void VentanaPuerto::Ventana(float xW1, float yW1, float xW2, float yW2)
{
xWmin = xW1; //0
yWmin = yW1; //0
xWmax = xW2; //500
yWmax = yW2; //500
}
void VentanaPuerto::Puerto_Vision(int xPv1, int yPv1, int xPv2, int yPv2)
{
xPvmin = xPv1;
yPvmin = yPv1;
xPvmax = xPv2;
yPvmax = yPv2;
}
void VentanaPuerto::Mapeo(float x1, float y1, int *xt1, int *yt1, int L, int M)
{
float sx, sy;
sx = (xPvmax - xPvmin) / (xWmax - yWmin);
sy = (yPvmax - yPvmin) / (yWmax - yWmin);
*xt1 = floor(sx * (x1 - xWmin) + xPvmin + L + 0.5);
*yt1 = floor(sy * (yWmin - y1) - yPvmin + M + 0.5);
}
void __fastcall TForm1::Button6Click(TObject *Sender)
{
int fig[4][2] = {{1, 1},
{3, 1},
{2, 3},
{1, 1}};
VentanaPuerto vp;
vp.Ventana(0, 0, 22, 28);
Canvas->Rectangle(100, 100, 321, 380);
vp.Puerto_Vision(100, 100, 321, 380);
int L = 0;
int M = 190 + 290;
int xx1, yy1, xx2, yy2;
vp.Mapeo(fig[0][0],fig[0][1], &xx1, &yy1, L, M);
Canvas->MoveTo(xx1, yy1);
for(int i = 1; i < 4; i++)
{
vp.Mapeo(fig[i][0], fig[i][1], &xx1, &yy1, L, M);
Canvas->LineTo(xx1, yy1);
}
}
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario