import java.awt.*;
/**
* La classe AfficheurProjectionOrthographique
implante
* l'interface {@link Afficheur Afficheur} pour developper une methode d'affichage
* d'un objet en projection parallele orthographique utilisable
* au sein d'un {@link ApplicationCanvas ApplicationCanvas}.
*
* @author Nicolas Janey
* @author nicolas.janey@univ-fcomte.fr
* @version 1.0, 12/11/08
*/
public class AfficheurProjectionOrthographique implements Afficheur {
/**
* Tableau de stockage des {@link Position3D Position3D} des sommets
* definissant l'objet affiche.
*/
private static final Position3D [] pts = { new Position3D( 2.0,0.0,3.0),
new Position3D( 2.0,3.0,3.0),
new Position3D( 0.0,5.0,3.0),
new Position3D(-2.0,3.0,3.0),
new Position3D(-2.0,0.0,3.0),
new Position3D( 2.0,0.0,-3.0),
new Position3D( 2.0,3.0,-3.0),
new Position3D( 0.0,5.0,-3.0),
new Position3D(-2.0,3.0,-3.0),
new Position3D(-2.0,0.0,-3.0) };
/**
* Tableau de stockage des indices au sein du tableau de {@link Position3D Position3D}
* definissant les segments de droite de dessin en fil de fer de l'objet affiche.
*/
private static final int [][] indexe = { { 0, 1 },
{ 1, 2 },
{ 2, 3 },
{ 3, 4 },
{ 4, 0 },
{ 5, 6 },
{ 6, 7 },
{ 7, 8 },
{ 8, 9 },
{ 9, 5 },
{ 0, 5 },
{ 1, 6 },
{ 2, 7 },
{ 3, 8 },
{ 4, 9 } };
/**
* Facteur de zoom a l'affichage.
*/
private static final double zoom = 40.0;
/**
* Methode d'affichage executee en boucle infinie pour realiser l'affichage
* d'un objet en projection parallele orthographique.
*
* @param g l'objet Graphics
d'affichage.
* @param numeroImage le nombre de fois ou cette methode a deja ete appelee.
* @param tx la largeur (en pixels) de la zone de dessin.
* @param ty la hauteur (en pixels) de la zone de dessin.
*/
public void paint(Graphics g,int numeroImage,int tx,int ty) {
g.drawString("Image : "+numeroImage,10,20);
double angle = numeroImage*Math.PI/45.0;
double x = Math.round(1000.0*Math.cos(angle))/100.0;
double y = 4.0;
double z = Math.round(1000.0*Math.sin(angle))/100.0;
g.drawString("x : "+x,10,40);
g.drawString("y : "+y,10,60);
g.drawString("z : "+z,10,80);
Ortho ortho = new Ortho(new Position3D(x,y,z),new Position3D(0.0,3.0,0.0));
Position3D [] np = new Position3D[pts.length];
for ( int i = 0 ; i < np.length ; i++ )
np[i] = ortho.transform(pts[i]);
double cx = tx/2.0;
double cy = ty/2.0;
for ( int i = 0 ; i < indexe.length ; i++ ) {
Position3D pi = np[indexe[i][0]];
Position3D pf = np[indexe[i][1]];
g.drawLine((int) (cx+pi.getX()*zoom),
(int) (cy-pi.getY()*zoom),
(int) (cx+pf.getX()*zoom),
(int) (cy-pf.getY()*zoom));
}
}
}