/* Bresenham algorithm */ import java.applet.*; import java.awt.*; //import java.awt.event.*; // for JDK1.2 /* **************************************************************: */ //public class Bresen extends Applet implements MouseListener{ // for JDK1.2 public class Bresen extends Applet { Point[] p = new Point[2]; int n=0; /* **************************************************************: */ public void init() { setBackground(new Color( 160, 160,170)); // 背景の色 // for JDK1.0 Dimension appsize = size(); // 画像サイズ for JDK1.0 resize(appsize); // for JDK1.2 /* resize(getSize().width, getSize().height); // for JDK1.2 this.addMouseListener(this); */ } /* *************** 描画関数 *****************************: */ public void paint(Graphics g) { if(p[0]!=null){ g.setColor(Color.yellow); for(int i = 0; i < n; i++) // 2端点の表示 g.fillOval(p[i].x-2, p[i].y-2, 5, 5); if(n>1) { g.setColor(Color.black); // 線分の表示 BresenDraw(p[0].x,p[0].y,p[1].x,p[1].y,g); } } } /* ******************** event handling *****************************: */ // for JDK.1. public boolean mouseDown(Event evt, int x, int y) { if(n < 2){ p[n] = new Point(x,y); n++; }else{ n=0; } repaint(); return true; } // for JDK 1.2 /* public void mousePressed(MouseEvent e) { } public void mouseClicked(MouseEvent e) { if(n < 2){ p[n] = new Point(e.getX(),e.getY()); n++; }else{ n=0; } repaint(); } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseMoved(MouseEvent e) { } */ /* ------------------------------------------------ */ public void BresenDraw(int x0, int y0, int x1, int y1, Graphics g) { int dx = x1 - x0; int dy = y1 - y0; int x = x0; int y = y0; int dx2 = 2*Math.abs(dx), dy2 = 2*Math.abs(dy); if (Math.abs(dy) < Math.abs(dx)) scanX(dx, dy, dx2, dy2, x, y, g); else scanY(dx, dy, dx2, dy2, x, y, g); } /* Scan X Direction */ void scanX(int dx, int dy, int dx2, int dy2, int x, int y,Graphics g) { int i, eps; eps = -Math.abs(dx); for (i=0; i<=Math.abs(dx); i++) { g.fillRect(x,y,1,1); x = x + addDir(dx); eps = eps + dy2; if (eps >= 0) { y = y + addDir(dy); eps = eps - dx2; } } } /* Scan Y Direction */ void scanY(int dx, int dy, int dx2, int dy2,int x, int y,Graphics g) { int i, eps; eps = -Math.abs(dy); for (i=0; i<=Math.abs(dy); i++) { g.fillRect(x,y,1,1); y = y + addDir(dy); eps = eps + dx2; if (eps >= 0) { x = x + addDir(dx); eps = eps - dy2; } } } /* additional Direction */ int addDir(int dxy) { if (dxy < 0) return -1; else if (dxy == 0) return 0; else return 1; } }