import java.awt.*;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.awt.event.*;
public class TestMain1 {
 public static void main(String[] args) {
  FrameDraw1 fd=new FrameDraw1();
 }
}
class FrameDraw1 extends Frame{
 int i;
 static ArrayList <Point[]> list =new ArrayList<Point[]>();
 
 public FrameDraw1(){
  init();
  this.addWindowListener(new WindowAdapter(){
  public void windowClosing(WindowEvent e){
   System.exit(0);}
  });
  this.setBounds(20,20,400,400);
  this.setVisible(true);
 }
   void init(){
    this.addMouseListener(new Moo1(this));
   }
   public void paint(Graphics g){
    for(int i=0;i<list.size();i++){
     Point []p=(Point[])list.get(i);
     int j=2;
     while(p[j]!=null&&j<100){
      g.fillOval(p[j].x,p[j].y,4,4);
      j++;
     }
    }
   }
  
}
class Moo1 extends MouseAdapter{
 Point point;
 Point points[]=new Point[100];
 FrameDraw1 fd;
 ArrayList <Point>list=new ArrayList<Point>();
 public Moo1(FrameDraw1 fd){
  this.fd=fd;
 }
 public void mousePressed(MouseEvent e){
  point=(Point)e.getPoint();
        points[0]=point;//points[0]放的是起点的点坐标
  
 }
 public void mouseReleased(MouseEvent e) {
  point=(Point)e.getPoint();
  points[1]=point;//points[1]放的是终点的点坐标
     savePoint(points[0].x,points[0].y,points[1].x,points[1].y);
     fd.repaint();
    // FrameDraw1.list.add(list);
 }
 void savePoint(int x1,int y1,int x2,int y2){
     int x,y,a,b,d,d1,d2;
     a=y1-y2;
     b=x2-x1;
     x=x1;
     y=y1;
     point=new Point(x,y);
     d=2*a+b;d1=2*a;d2=2*(a+b);
     points[2]=point;
     int i;
     for(i=3,x=x1;x<=x2&&i<100;x++,i++){
      if(d<0){y++;d+=d2;}
      else{d+=d1;}
      point=new Point(x,y);
      points[i]=point;
     }
     FrameDraw1.list.add(points);
     
    }

解决方案 »

  1.   

    http://topic.csdn.net/u/20100613/12/303574b1-2e7b-45da-a3ce-61073d733787.html?seed=1573415684&r=66220127#r_66220127同一个人,同一个问题吧。
      

  2.   

    同一个答案。。我这有个算法,你可以试试。当x2-x1>0,y2-y1<0的情况和x1-x2<0,y2-y1>0的情况时,就是a>0,b<0和a<0,b>0的情况,也就是x2-x1>0,y2-y1>0和x2-x1<0,y2-y1<0的交叉边。所以可以取直线的中点坐标,以(0,y)线或(x,0)线镜像点,计算x2-x1,y2-y1的时候取对面的点,保存的时候再保存原来的点即可。