Hola, estoy tratando de crear la transformada afín que me permita transformar un triángulo en otro. Lo que tengo son las coordenadas para los 2 triángulos. ¿Me puedes ayudar?Transformar un triángulo en otro triángulo
Tras la respuesta de Adam Rosenfield me encontré con este código en caso de que alguien se aburre de resolver la ecuación de sí mismo:
public static AffineTransform createTransform(ThreePointSystem source,
ThreePointSystem dest) {
double x11 = source.point1.getX();
double x12 = source.point1.getY();
double x21 = source.point2.getX();
double x22 = source.point2.getY();
double x31 = source.point3.getX();
double x32 = source.point3.getY();
double y11 = dest.point1.getX();
double y12 = dest.point1.getY();
double y21 = dest.point2.getX();
double y22 = dest.point2.getY();
double y31 = dest.point3.getX();
double y32 = dest.point3.getY();
double a1 = ((y11-y21)*(x12-x32)-(y11-y31)*(x12-x22))/
((x11-x21)*(x12-x32)-(x11-x31)*(x12-x22));
double a2 = ((y11-y21)*(x11-x31)-(y11-y31)*(x11-x21))/
((x12-x22)*(x11-x31)-(x12-x32)*(x11-x21));
double a3 = y11-a1*x11-a2*x12;
double a4 = ((y12-y22)*(x12-x32)-(y12-y32)*(x12-x22))/
((x11-x21)*(x12-x32)-(x11-x31)*(x12-x22));
double a5 = ((y12-y22)*(x11-x31)-(y12-y32)*(x11-x21))/
((x12-x22)*(x11-x31)-(x12-x32)*(x11-x21));
double a6 = y12-a4*x11-a5*x12;
return new AffineTransform(a1, a4, a2, a5, a3, a6);
}
Entonces, ¿tiene que "mover" el triángulo de manera que las coordenadas coincidan con las segundas coordenadas sin cambiar la apariencia del triángulo? ¿Qué tipo de coordenadas tienes? – Janusz
2 triángulos completamente diferentes (tanto en forma como en ubicación). Ambos residen en el mismo sistema de coordenadas. –
Muy útil, gracias! Solo un recordatorio rápido de que si utiliza el lienzo de Javascript html5, la función context.setTransform() toma las salidas exactas de su función, por lo que esta es una gran herramienta para mapear imágenes de un sistema de coordenadas a otro cuando tiene un triángulo de puntos registrados para cada. – JayCrossler