⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 draw.java

📁 mpl.add(new MenuItem("DDA画线")) mpl.add(new MenuItem("中点画线")) mpl.add(new MenuItem("Bresenham
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
      break;
      case 3:g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,y+y0+1,1,1);
     g.fillOval(x+x0,y+y0-1,1,1);
     g.fillOval(x+x0,-y+y0,1,1);
     g.fillOval(x+x0,-y+y0+1,1,1);
     g.fillOval(x+x0,-y+y0-1,1,1);
     g.fillOval(-x+x0,y+y0,1,1);
     g.fillOval(-x+x0,y+y0+1,1,1);
     g.fillOval(-x+x0,y+y0-1,1,1);
     g.fillOval(-x+x0,-y+y0,1,1);
     g.fillOval(-x+x0,-y+y0+1,1,1);
     g.fillOval(-x+x0,-y+y0-1,1,1);
     g.fillOval(-y+x0,-x+y0,1,1);
    g.fillOval(-y+x0,-x+y0+1,1,1);
    g.fillOval(-y+x0,-x+y0-1,1,1);
     g.fillOval(y+x0,-x+y0,1,1);
     g.fillOval(y+x0,-x+y0+1,1,1);
     g.fillOval(y+x0,-x+y0-1,1,1);
     g.fillOval(y+x0,x+y0,1,1);
     g.fillOval(y+x0,x+y0+1,1,1);
     g.fillOval(y+x0,x+y0-1,1,1);
     g.fillOval(-y+x0,x+y0,1,1);
     g.fillOval(-y+x0,x+y0+1,1,1);
     g.fillOval(-y+x0,x+y0-1,1,1);
      break;}
     //显示圆弧上的八个对称点
     
     g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,-y+y0,1,1);
     g.fillOval(-x+x0,y+y0,1,1);
     g.fillOval(-x+x0,-y+y0,1,1);
     g.fillOval(-y+x0,-x+y0,1,1);
     g.fillOval(y+x0,-x+y0,1,1);
     g.fillOval(y+x0,x+y0,1,1);
     g.fillOval(-y+x0,x+y0,1,1);     
	 }//while
	     }
  public void midCircle2(Graphics g,Image buffer,Color c,int linestyle,int point,int x0,int y0,int r){
  	int x,y,mark=0x8000,n=0;float a;
  	g.setPaintMode();
	   g.setColor(c);
	   x=0; y=r;a=3.14f/(360*r);
	   //在屏幕上画圆 
       g.fillOval(x0,y0,3,3); //画圆心 
     //显示圆弧上的八个对称点
    
    while(a<=2*3.14f){
       x=(int)Math.round((r*Math.cos(a))+0.5);
       y=(int)Math.round((r*Math.sin(a))+0.5);
       a=a+3.14f/(360*r);
       n++;
     if(n%16>1)  mark=0x8000>>(n%16-1);
          if(n%16==1) mark=0x8000;
          if(n%16==0) mark=0x0001;
          if((linestyle & mark)!=0)
           switch(point){
           	case 1:g.fillOval(x+x0,y+y0,1,1);
     break;
     case 2:g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,y+y0+1,1,1);
      break;
      case 3:g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,y+y0+1,1,1);
     g.fillOval(x+x0,y+y0-1,1,1);
      break;}     
	 }//while
	 //在缓冲区画圆
	 g=buffer.getGraphics();
	 g.setPaintMode();
	   g.setColor(c);
       x=0; y=r; 
        g.fillOval(x0,y0,3,3); //画圆心
     while(a<=2*3.14){
       x=(int)Math.round((r*Math.cos(a))+0.5);
       y=(int)Math.round((r*Math.sin(a))+0.5);
       a=a+3.14f/(360*r);
       n++;
     if(n%16>1)  mark=0x8000>>(n%16-1);
          if(n%16==1) mark=0x8000;
          if(n%16==0) mark=0x0001;
          if((linestyle & mark)!=0)
           switch(point){
           	case 1:g.fillOval(x+x0,y+y0,1,1);
     break;
     case 2:g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,y+y0+1,1,1);
      break;
      case 3:g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,y+y0+1,1,1);
     g.fillOval(x+x0,y+y0-1,1,1);
      break;}    
	 }//while 
       }
  public void midCircle3(Graphics g,Image buffer,Color c,int linestyle,int point,int x0,int y0,int r)
  	{  int x,y,mark=0x8000,n=0;
       float d;
       g.setPaintMode();
	   g.setColor(c);
       x=0; y=r; d=1-r;
       //在屏幕画圆 
      g.fillOval(x0,y0,3,3); //画圆心 
     //显示圆弧上的八个对称点
     g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,-y+y0,1,1);
     g.fillOval(-x+x0,y+y0,1,1);
     g.fillOval(-x+x0,-y+y0,1,1);
     g.fillOval(-y+x0,-x+y0,1,1);
     g.fillOval(y+x0,-x+y0,1,1);
     g.fillOval(y+x0,x+y0,1,1);
     g.fillOval(-y+x0,x+y0,1,1);              
     while(x<=y)
     {if(d<0) d+=2*x+3;//正右方的点
	  else { d+=2*(x-y)+5;y--;}//右上方的点
      x++;
      n++;
     if(n%16>1)  mark=0x8000>>(n%16-1);
          if(n%16==1) mark=0x8000;
          if(n%16==0) mark=0x0001;
          if((linestyle & mark)!=0)
           switch(point){
           	case 1:g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,-y+y0,1,1);
     g.fillOval(-x+x0,y+y0,1,1);
     g.fillOval(-x+x0,-y+y0,1,1);
     g.fillOval(-y+x0,-x+y0,1,1);
     g.fillOval(y+x0,-x+y0,1,1);
     g.fillOval(y+x0,x+y0,1,1);
     g.fillOval(-y+x0,x+y0,1,1);
     break;
     case 2:g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,y+y0+1,1,1);
     g.fillOval(x+x0,-y+y0,1,1);
     g.fillOval(x+x0,-y+y0+1,1,1);
     g.fillOval(-x+x0,y+y0,1,1);
     g.fillOval(-x+x0,y+y0+1,1,1);
     g.fillOval(-x+x0,-y+y0,1,1);
     g.fillOval(-x+x0,-y+y0+1,1,1);
     g.fillOval(-y+x0,-x+y0,1,1);
    g.fillOval(-y+x0,-x+y0+1,1,1);
     g.fillOval(y+x0,-x+y0,1,1);
     g.fillOval(y+x0,-x+y0+1,1,1);
     g.fillOval(y+x0,x+y0,1,1);
     g.fillOval(y+x0,x+y0+1,1,1);
     g.fillOval(-y+x0,x+y0,1,1);
      g.fillOval(-y+x0,x+y0+1,1,1);
      break;
      case 3:g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,y+y0+1,1,1);
     g.fillOval(x+x0,y+y0-1,1,1);
     g.fillOval(x+x0,-y+y0,1,1);
     g.fillOval(x+x0,-y+y0+1,1,1);
     g.fillOval(x+x0,-y+y0-1,1,1);
     g.fillOval(-x+x0,y+y0,1,1);
     g.fillOval(-x+x0,y+y0+1,1,1);
     g.fillOval(-x+x0,y+y0-1,1,1);
     g.fillOval(-x+x0,-y+y0,1,1);
     g.fillOval(-x+x0,-y+y0+1,1,1);
     g.fillOval(-x+x0,-y+y0-1,1,1);
     g.fillOval(-y+x0,-x+y0,1,1);
    g.fillOval(-y+x0,-x+y0+1,1,1);
    g.fillOval(-y+x0,-x+y0-1,1,1);
     g.fillOval(y+x0,-x+y0,1,1);
     g.fillOval(y+x0,-x+y0+1,1,1);
     g.fillOval(y+x0,-x+y0-1,1,1);
     g.fillOval(y+x0,x+y0,1,1);
     g.fillOval(y+x0,x+y0+1,1,1);
     g.fillOval(y+x0,x+y0-1,1,1);
     g.fillOval(-y+x0,x+y0,1,1);
     g.fillOval(-y+x0,x+y0+1,1,1);
     g.fillOval(-y+x0,x+y0-1,1,1);
      break;}
     //显示圆弧上的八个对称点
     
     g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,-y+y0,1,1);
     g.fillOval(-x+x0,y+y0,1,1);
     g.fillOval(-x+x0,-y+y0,1,1);
     g.fillOval(-y+x0,-x+y0,1,1);
     g.fillOval(y+x0,-x+y0,1,1);
     g.fillOval(y+x0,x+y0,1,1);
     g.fillOval(-y+x0,x+y0,1,1);     
	 }//while
	 //在缓冲区画圆
	 g=buffer.getGraphics();
	 g.setPaintMode();
	   g.setColor(c);
       x=0; y=r; d=1-r;
       g.fillOval(x0,y0,3,3); //画圆心 
     //显示圆弧上的八个对称点
     g.fillOval(x+x0+1,y+y0,1,1);
     g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,-y+y0,1,1);
     g.fillOval(-x+x0,y+y0,1,1);
     g.fillOval(-x+x0,-y+y0,1,1);
     g.fillOval(-y+y0,-x+x0,1,1);
     g.fillOval(y+y0,-x+x0,1,1);
     g.fillOval(y+y0,x+x0,1,1);
     g.fillOval(-y+y0,x+x0,1,1);              
     while(x<=y)
     {if(d<0) d+=2*x+3;//正右方的点
	  else { d+=2*(x-y)+5;y--;}//右上方的点
      x++;
      n++;
     if(n%16>1)  mark=0x8000>>(n%16-1);
          if(n%16==1) mark=0x8000;
          if(n%16==0) mark=0x0001;
          if((linestyle & mark)!=0)
           switch(point){
           	case 1:g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,-y+y0,1,1);
     g.fillOval(-x+x0,y+y0,1,1);
     g.fillOval(-x+x0,-y+y0,1,1);
     g.fillOval(-y+x0,-x+y0,1,1);
     g.fillOval(y+x0,-x+y0,1,1);
     g.fillOval(y+x0,x+y0,1,1);
     g.fillOval(-y+x0,x+y0,1,1);
     break;
     case 2:g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,y+y0+1,1,1);
     g.fillOval(x+x0,-y+y0,1,1);
     g.fillOval(x+x0,-y+y0+1,1,1);
     g.fillOval(-x+x0,y+y0,1,1);
     g.fillOval(-x+x0,y+y0+1,1,1);
     g.fillOval(-x+x0,-y+y0,1,1);
     g.fillOval(-x+x0,-y+y0+1,1,1);
     g.fillOval(-y+x0,-x+y0,1,1);
    g.fillOval(-y+x0,-x+y0+1,1,1);
     g.fillOval(y+x0,-x+y0,1,1);
     g.fillOval(y+x0,-x+y0+1,1,1);
     g.fillOval(y+x0,x+y0,1,1);
     g.fillOval(y+x0,x+y0+1,1,1);
     g.fillOval(-y+x0,x+y0,1,1);
      g.fillOval(-y+x0,x+y0+1,1,1);
      break;
      case 3:g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,y+y0+1,1,1);
     g.fillOval(x+x0,y+y0-1,1,1);
     g.fillOval(x+x0,-y+y0,1,1);
     g.fillOval(x+x0,-y+y0+1,1,1);
     g.fillOval(x+x0,-y+y0-1,1,1);
     g.fillOval(-x+x0,y+y0,1,1);
     g.fillOval(-x+x0,y+y0+1,1,1);
     g.fillOval(-x+x0,y+y0-1,1,1);
     g.fillOval(-x+x0,-y+y0,1,1);
     g.fillOval(-x+x0,-y+y0+1,1,1);
     g.fillOval(-x+x0,-y+y0-1,1,1);
     g.fillOval(-y+x0,-x+y0,1,1);
    g.fillOval(-y+x0,-x+y0+1,1,1);
    g.fillOval(-y+x0,-x+y0-1,1,1);
     g.fillOval(y+x0,-x+y0,1,1);
     g.fillOval(y+x0,-x+y0+1,1,1);
     g.fillOval(y+x0,-x+y0-1,1,1);
     g.fillOval(y+x0,x+y0,1,1);
     g.fillOval(y+x0,x+y0+1,1,1);
     g.fillOval(y+x0,x+y0-1,1,1);
     g.fillOval(-y+x0,x+y0,1,1);
     g.fillOval(-y+x0,x+y0+1,1,1);
     g.fillOval(-y+x0,x+y0-1,1,1);
      break;}
     //显示圆弧上的八个对称点
     g.fillOval(x+x0+1,y+y0,1,1);
     g.fillOval(x+x0,y+y0,1,1);
     g.fillOval(x+x0,-y+y0,1,1);
     g.fillOval(-x+x0,y+y0,1,1);
     g.fillOval(-x+x0,-y+y0,1,1);
     g.fillOval(-y+y0,-x+x0,1,1);
     g.fillOval(y+y0,-x+x0,1,1);
     g.fillOval(y+y0,x+x0,1,1);
     g.fillOval(-y+y0,x+x0,1,1);  
	 }//while
	 
 }//midcircle
}//drawcircle
 
class Fill  
{    
     static int LEFT=0,RIGHT=0,TOP=0,BOTTOM=0;
	 static int TAB_TERM[]=new int[900];
	 static int PUSH_POINT=0;
	 static int POP_POINT=0;
	 int xl,xr,x_left=0,x_right=0,se_x=0,se_y=0;
	 Robot bt;                                               //(se_x,se_y)是种子坐标
     Fill(){                                    //x_left左边界,x_right右边界
     LEFT=0;RIGHT=draw.width-1;TOP=0;BOTTOM=draw.height-1; 
     xl=0;xr=0;
     }

	
void scan_board(draw f,int seed_x,int seed_y,Color f_color,Color g_color)//g_color是背景色  f_color是填充色
{
	 	int x,y,r;
	 	x=seed_x;
	 	y=seed_y;
	 
	 	Color color=f.getBackground();
	 	while(true)
	 	{	--x;
	 		if(x<=LEFT)  break;
	 	
	 	    
	 		  color=bt.getPixelColor(x,y);
	 	      
	 	    if(!color.equals(g_color))break;
	    }
	      x_left=++x; xl=x_left;
	 	 
	 	   x=seed_x; 
	 	   
	 	    
	 	    while(true)
	 	    {
	 	    	++x;
	 	    	if(x>=RIGHT)
	 	    	   break;
	 	    
	 	        
	 		      color=bt.getPixelColor(x,y);
	 	           
	 	        if(!color.equals(g_color))
	 	        { break;} 
	 	     }
	 	     
	 	        x_right=--x;
	 	        xr=x_right;
	 	       
	 	        
	 	    Graphics g=f.getGraphics();
	 	    g.setColor(f_color); 	     
	 	    g.drawLine(x_left,y,x_right,y);
	 	    
	 	    g=f.buffer.getGraphics();
	 	    g.setColor(f_color); 	     
	 	    g.drawLine(x_left,y,x_right,y);
      }
      
      void push_x(int x_left,int x_right,int seed_y)
      {
      	if(PUSH_POINT>=TAB_TERM.length)
      	    PUSH_POINT=0;
      	TAB_TERM[PUSH_POINT]=x_left;
      	PUSH_POINT++;
      	TAB_TERM[PUSH_POINT]=x_right;
      	PUSH_POINT++;
      	TAB_TERM[PUSH_POINT]=seed_y;
      	PUSH_POINT++;
      }
      
      void pop_x()
      {if(POP_POINT>=TAB_TERM.length)
         POP_POINT=0;
       xl=TAB_TERM[POP_POINT];
       POP_POINT++;
       xr=TAB_TERM[POP_POINT];
       POP_POINT++;
       se_y=TAB_TERM[POP_POINT];
       POP_POINT++;
      }
      
      void fill_area(draw f,int x,int y,Color f_color)
      {
      	Color color,g_color;
      	int y_up,y_down,i;
      	PUSH_POINT=0;
      	POP_POINT=0;
      	f.display();
      	try
		{
			bt=new Robot();
		}
		catch(Exception e)
		{
			System.out.print(e.getMessage());
		}
		
      	Graphics g=f.getGraphics();
      	color = Color.black; 
      	g.setColor(color);
      	
		/*判断点(x,y)是否是种子*/
      	if(x<0||x>=RIGHT)  return;
      	if(y<0||y>=BOTTOM) return;
      	
	 	g_color=bt.getPixelColor(x,y);
	 
	 	  
	 	if(f_color.equals(g_color))  return;
	 	
	 	/*点(x,y)是种子*/
	scan_board(f,x,y,f_color,g_color);
	 	
	 	
	 	push_x(xl,xr,y);
	 	
	 	while(PUSH_POINT!=POP_POINT)//队列不空时
	 	{
	 		pop_x();
	 		y_up=se_y;
	 		y_down=se_y;
	 		if(y_up>TOP)  y_up--;//向上走
	 	    if(y_down<BOTTOM)  y_down++;//向下走
	 	//在上一条扫描线和下一条扫描线上找种子
	 		for(i=xl;i<xr;i++)   
	 		{
	 			              
	 	        
	 		      color=bt.getPixelColor(i,y_up);
	 	        //在上一条扫描线上找种子   
	 	        if(color.equals(g_color))
	 	        {
	 	        	scan_board(f,i,y_up,f_color,g_color);
	 	        	push_x(x_left,x_right,y_up);
	 	         }
	 	        
	 		      color=bt.getPixelColor(i,y_down);
	 	         //在下一条扫描线上找种子  
	 	        if(color.equals(g_color))
	 	         {
	 	         	scan_board(f,i,y_down,f_color,g_color);
	 	         	push_x(x_left,x_right,y_down);
	 	         }
	 	      }//for
	 	   
	     } //WHILE
	     
	     
	   }
	   
}//

	           
                                                                  
		
				
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -