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); } } }