资源简介

三种算法java实现画线,java没有自带画点函数,所以用drawline画点,主要是图形学算法实现。

资源截图

代码片段和文件信息

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class DrawLinePanel1 extends JPanel
{

 private static final long serialVersionUID = 1L;
 private int startX = 0;
 private int startY = 0;
 private int endX = 0;
 private int endY = 0;

 public DrawLinePanel1() 
 {

  addMouseListener(new MouseHandler());
}

 private class MouseHandler extends MouseAdapter 
 {
  public void mousePressed(MouseEvent event) {// 鼠标按下时
   if (event.getButton() == MouseEvent.BUTTON1) 
   {
    startX = event.getX();
    startY = event.getY();
   }
  }

  public void mouseReleased(MouseEvent event) {// 鼠标释放时
   if (event.getButton() == MouseEvent.BUTTON1) 
   {
     endX=event.getX();
     endY=event.getY();
     Container c = (Container) event.getSource();
     Graphics g = c.getGraphics(); //get a graphics context
     g.setColor(Color.BLUE);

    
     DDA(startXstartYendXendYg);//下面注释的是中点画线算法和Bresenham算法
     
//      MidPoint(startXstartYendXendYg);
//      Bresenham(startXstartYendXendYg);
   }
   
   
   } 
  private void DDA(int x0 int y0 int x1 int y1Graphics g) 
  {
     double dxdyk;
     dx = x1-x0;dy = y1-y0;
     k = dy/dx;
     
   if(Math.abs(k) >= 1.0)
   {
   
   int y = 0;
   k =  dx/dy;
      double x = Math.max(x1 x0);
      if(k >= 0)
      x = Math.min(x1 x0);
      
      for(y = Math.min(y1y0); y <= Math.max(y0 y1); y++)
     {
      g.drawLine((int)(x+0.5) y (int)(x+0.5)y);
         x = x+k;
     }
    }
    else
    {
      int x = 0;
      double y = Math.min(y0y1);
      if(k>-1 && k<0)
      y = Math.max(y0y1);
     for(x = Math.min(x0x1); x <= Math.max(x0x1); x++)
     {
      g.drawLine(x (int)(y+0.5) x (int)(y+0.5));
         y = y+k;
     }
   } 
  }
  private void MidPoint(int x0 int y0 int x1 int y1Graphics g){
  
  int abd1d2dx = 0y;double k = 0;
     a=y0-y1;b=x1-x0;
     k = (-1.0*a)/b;
     
     if(Math.abs(k)<=1)
     {
      if(k>=0)
      {
      a = Math.abs(y1-y0)*-1;  b = Math.abs(x1-x0);
     d = 2*a + b;
      d1 = 2*a; d2 = 2*(a+b);
      x = Math.min(x0x1); y = Math.min(y0y1);
      g.drawLine(x y x y);
      while(x       {
      if(d<0)
       {x++; y++; d+=d2;}
      else
         {x++;d+=d1;}
      g.drawLine(x y x y);
      }
      }
      else
      {
      //a=Math.max(y1y0)-Math.min(y1 y0);b=Math.max(x1x0)-Math.min(x1x0);
      a = Math.abs(y1-y0);  b = Math.abs(x1-x0);
      d=2*a-b;d2=2*a-2*b;d1=2*a;   
      x =Math.min(x1 x0);
      y = Math.max(y1 y0);
      g.drawLine(x y x y);
          while (x           {  
           if (d>0)    
            {
           x++;
           y--;
           d+=d2;
           }  
              else    
              {

评论

共有 条评论