2010-07-08 16 views

Respuesta

5

Esto no se puede hacer usando la clase AffineTransform. Véase el artículo de Wikipedia sobre transformación afín:

En general, una transformación afín se compone de transformaciones lineales (giro, escala o cizalla) y una traducción (o "cambio").

Lo que necesita es alguna forma de transformación de perspectiva. De http://java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/PerspectiveTransform.html

Una transformación de perspectiva es capaz de mapear un cuadrilátero arbitrario en otro cuadrilátero arbitrario, preservando al mismo tiempo la rectitud de líneas. A diferencia de una transformación afín, el paralelismo de las líneas en la fuente no se conserva necesariamente en la salida.

De http://answers.google.com/answers/threadview/id/515829.html

La API Java Advanced Imaging le permite realizar fácilmente perspectiva de transformar.

Al igual que en Java2D y Java3D, estas rutinas están optimizadas, no son ejecutadas de la manera habitual interpretada por Java, por lo que son muy rápidas como .

El JAI se puede descargar desde

http://java.sun.com/products/java-media/jai/downloads/download-1_1_2.html

puede encontrar información sobre cómo ejecutar perspectiva transformar en:

http://java.sun.com/products/java-media/jai/forDevelopers/jai1_0_1guide-unc/

+0

Gracias por la ayuda, pero no encontré cualquier ejemplo de cómo usar la transformación de perspectiva JAI, y sus JavaDocs son bastante poco informativos ... – newbie

+0

Alguien me ayudó con la parte matemática de este pregunta aquí http://stackoverflow.com/questions/4217370/how-can-i-project-an-arbitrary-plane-identified-by-4-points-unto-a-2d-plane – Scott

0

Si usted quiere hacer un montón de dibujo rápido en 3D entonces yo sugiero mirar en una solución de renderizado 3D tales como OpenGL/JOGL.

Si es sólo una rápida transformación de una sola vez, entonces puede simular esto con bastante facilidad por

  • bucle sobre todas las líneas de 2.
  • Escala de la línea correspondiente en 1. y el dibujo que más de la línea en 2, estirándola a la proporción correcta (necesitará algunas matemáticas básicas para resolver esto)