import java.awt.*;
/**
* La classe Afficheur4Connexite
implante l'interface {@link Afficheur Afficheur}
* pour developper de maniere correcte une methode d'affichage d'un segment de droite 2D
* en 4-connexite au moyen de l'algorithme de Bresenham.
*
* @author Nicolas Janey
* @author nicolas.janey@univ-fcomte.fr
* @version 1.0, 12/11/08
*/
public class Afficheur4Connexite implements Afficheur {
private int tx;
private int ty;
private int zoom = 20;
private Graphics g;
/**
* 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("4 connexité",10,20);
this.tx = tx;
this.ty = ty;
this.g = g;
ligne(2,2,21,13);
g.setColor(Color.yellow);
g.drawLine((int) (2.5*zoom),(int) (ty-1.5*zoom),
(int) (21.5*zoom),(int) (ty-12.5*zoom));
}
private void tracePixel(int x,int y,Color c) {
// System.out.format("%3d %3d\n",x,y);
g.setColor(c);
g.fillRect(x*zoom,ty-y*zoom,zoom,zoom);
g.setColor(Color.black);
g.drawRect(x*zoom,ty-y*zoom,zoom,zoom);
}
/* xf > xi */
/* yf > yi */
/* xf-xi > yf-yi */
private void ligne(int xi,int yi,int xf,int yf) {
int dx,dy;
int cumul;
int x,y;
x = xi;
y = yi;
dx = xf - xi;
dy = yf - yi;
tracePixel(x,y,Color.red);
cumul = dx >> 1;
for ( x = xi+1 ; x <= xf ; x++ ) {
cumul += dy;
if (cumul >= dx) {
cumul -= dx;
y += 1;
if ( cumul > (dy>>1) )
tracePixel(x-1,y,Color.blue);
else
tracePixel(x,y-1,Color.green); }
tracePixel(x,y,Color.red); }
}
}