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

📄 draw.java

📁 mpl.add(new MenuItem("DDA画线")) mpl.add(new MenuItem("中点画线")) mpl.add(new MenuItem("Bresenham
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
		else 
		{
		    g.setPaintMode();
			g.setColor(c);
			
		}
        
        for(i=1;i<=length;i++)
        {
        	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)
        	  if(length==Math.abs(xu1-xu0))
        	   switch(point)
        	   {
        	     case 1: g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5),1,1);
        	             break;
        	     case 2: g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5),1,1);
        	             g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5)+1,1,1);
        	             break;
        	     case 3: g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5),1,1);
        	             g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5)-1,1,1);
        	             g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5)+1,1,1);
        	             break;
        	     case 4: {if(point%2==0){
        	     	        for(j=0;j<=j/2;j++)
        	     	        g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5)+j,1,1);
        	     	        g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5)-j+1,1,1);}
        	     	      else {for(j=0;j<=j/2;j++)
        	     	        g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5)+j,1,1);
        	     	        g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5)-j,1,1);}
        	             break;}
        	   }
        	  else
        	    switch(point)
        	   {
        	     case 1: g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5),1,1);
        	             break;
        	     case 2: g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5),1,1);
        	             g.fillOval((int)Math.round(x+0.5)+1,(int)Math.round(y+0.5),1,1);
        	             break;
        	     case 3: g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5),1,1);
        	             g.fillOval((int)Math.round(x+0.5)-1,(int)Math.round(y+0.5),1,1);
        	             g.fillOval((int)Math.round(x+0.5)+1,(int)Math.round(y+0.5),1,1);
        	             break;
        	     case 4: {if(point%2==0){
        	     	        for(j=0;j<=j/2;j++)
        	     	        g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5)+j,1,1);
        	     	        g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5)-j+1,1,1);}
        	     	      else {for(j=0;j<=j/2;j++)
        	     	        g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5)+j,1,1);
        	     	        g.fillOval((int)Math.round(x+0.5),(int)Math.round(y+0.5)-j,1,1);}
        	             break;}
        	   }
        	  
        	x=x+increx;
        	y=y+increy;
    }
    }//DDA
 
 
 public void midLine(Graphics g,Image buffer,Color c,int linestyle,int point,int xu0,int yu0,int xu1,int yu1,boolean isXOR)                                                    //0<k<1时的中点画线法
{
	int a,b,d1,d2,d,x,y,t,dy,dx,k=0,mark=0x8000,n=0,j;
	if(xu0>xu1){t=xu0;xu0=xu1;xu1=t;t=yu0;yu0=yu1;yu1=t;}
	dy=yu0-yu1;
	dx=xu1-xu0;
	if(Math.abs(dy)<=Math.abs(dx))
	  if(dy>0)k=1;
	   else k=2;
	if(Math.abs(dy)>Math.abs(dx))
	   if(dy>0)k=3;
	   else k=4;
	a=yu0-yu1;
	b=xu1-xu0;
	/*在屏幕上画	*/
        if(isXOR) g.setXORMode(c);
		else 
		{
		    g.setPaintMode();
			g.setColor(c);
			
		}

	    
	
	switch(k){
	case 1:
	      d=2*a-b;
	      d1=2*a;
	      d2=2*(a-b);
	      x=xu0;
      	  y=yu0;
	      g.fillOval(xu0,yu0,1,1);
	      while(x<xu1)
	      {if(d>0)
		    {x++;y--;d+=d2;}
		   else  {x++;d+=d1;}
	  	  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,y,1,1);
		          break;
		   case 2:g.fillOval(x,y,1,1);
		          g.fillOval(x,y+1,1,1);
		          break;
		   case 3:g.fillOval(x,y,1,1);
		          g.fillOval(x,y+1,1,1);
		          g.fillOval(x,y-1,1,1);
		          break;
		    case 4: {if(point%2==0){
        	     	        for(j=0;j<=j/2;j++)
        	     	       g.fillOval(x,y+j,1,1);
        	     	        g.fillOval(x,y-j+1,1,1);}
        	     	      else {for(j=0;j<=j/2;j++)
        	     	        g.fillOval(x,y+j,1,1);
        	     	        g.fillOval(x,y-j,1,1);}
        	             break;}
		   }
	     }//while
	     
	     break;
	 case 2:
	      d=2*a+b;
	      d1=2*a;
	      d2=2*(a+b);
	      x=xu0;
      	  y=yu0;
	      g.fillOval(xu0,yu0,1,1);
	      while(x<xu1)
	      {
		   if(d<0)
		    {x++;y++;d+=d2;}
		   else  {x++;d+=d1;}
	  	  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,y,1,1);
		          break;
		   case 2:g.fillOval(x,y,1,1);
		          g.fillOval(x,y+1,1,1);
		          break;
		   case 3:g.fillOval(x,y,1,1);
		          g.fillOval(x,y+1,1,1);
		          g.fillOval(x,y-1,1,1);
		          break;
		    case 4: {if(point%2==0){
        	     	   for(j=0;j<=j/2;j++)
        	     	       g.fillOval(x,y+j,1,1);
        	     	        g.fillOval(x,y-j+1,1,1);}
        	     	 else {for(j=0;j<=j/2;j++)
        	     	        g.fillOval(x,y+j,1,1);
        	     	        g.fillOval(x,y-j,1,1);}
        	             break;}
		   
		   }
	     }//while  
	     break;   
	   case 3:
	      d=a-2*b;
	      d1=-2*b;
	      d2=2*(a-b);
	      x=xu0;
      	  y=yu0;
	      g.fillOval(xu0,yu0,1,1);
	      while(y>yu1)
	      {
		   if(d<0)
		    {y--;x++;d+=d2;}
		   else  {y--;d+=d1;}
	  	  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,y,1,1);
		          break;
		   case 2:g.fillOval(x,y,1,1);
		          g.fillOval(x+1,y,1,1);
		          break;
		   case 3:g.fillOval(x,y,1,1);
		          g.fillOval(x+1,y,1,1);
		          g.fillOval(x-1,y,1,1);
		          break;
		   case 4: {if(point%2==0){
        	     	        for(j=0;j<=j/2;j++)
        	     	       g.fillOval(x+j,y,1,1);
        	     	        g.fillOval(x-j+1,y,1,1);}
        	     	      else {for(j=0;j<=j/2;j++)
        	     	        g.fillOval(x+j,y,1,1);
        	     	        g.fillOval(x-j,y,1,1);}
        	             break;}
		   }
	     }//while
	     break;
	   case 4:
	      d=a+2*b;
	      d1=2*b;
	      d2=2*(a+b);
	      x=xu0;
      	  y=yu0;
	      g.fillOval(xu0,yu0,1,1);
	      while(y<yu1)
	      {
		   if(d>0)
		    {y++;x++;d+=d2;}
		   else  {y++;d+=d1;}
	  	  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,y,1,1);
		          break;
		   case 2:g.fillOval(x,y,1,1);
		          g.fillOval(x+1,y,1,1);
		          break;
		   case 3:g.fillOval(x,y,1,1);
		          g.fillOval(x+1,y,1,1);
		          g.fillOval(x-1,y,1,1);
		          break;
		   case 4: {if(point%2==0){
        	     	        for(j=0;j<=j/2;j++)
        	     	       g.fillOval(x+j,y,1,1);
        	     	        g.fillOval(x-j+1,y,1,1);}
        	     	      else {for(j=0;j<=j/2;j++)
        	     	        g.fillOval(x+j,y,1,1);
        	     	        g.fillOval(x-j,y,1,1);}
        	             break;}
		   }//switch(point)
	     }//while
	     break;
}//switch


    
//在缓冲区中画
        mark=0x8000;n=0;
        x=xu0;
        y=yu0;
        g=buffer.getGraphics();
             	
     	if(isXOR) g.setXORMode(c);
		else 
		{
		    g.setPaintMode();
			g.setColor(c);
			
		}
		
		
   switch(k){
	case 1:
	      d=2*a-b;
	      d1=2*a;
	      d2=2*(a-b);
	      x=xu0;
      	  y=yu0;
	      g.fillOval(xu0,yu0,1,1);
	      while(x<xu1)
	      {
		   if(d>0)
		    {x++;y--;d+=d2;}
		   else  {x++;d+=d1;}
	  	  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,y,1,1);
		          break;
		   case 2:g.fillOval(x,y,1,1);
		          g.fillOval(x,y+1,1,1);
		          break;
		   case 3:g.fillOval(x,y,1,1);
		          g.fillOval(x,y+1,1,1);
		          g.fillOval(x,y-1,1,1);
		          break;
		   case 4: {if(point%2==0){
        	     	   for(j=0;j<=j/2;j++)
        	     	       g.fillOval(x,y+j,1,1);
        	     	        g.fillOval(x,y-j+1,1,1);}
        	     	 else {for(j=0;j<=j/2;j++)
        	     	        g.fillOval(x,y+j,1,1);
        	     	        g.fillOval(x,y-j,1,1);}
        	             break;}
		   }
	     }//while
	     break;
	 case 2:
	      d=2*a+b;
	      d1=2*a;
	      d2=2*(a+b);
	      x=xu0;
      	  y=yu0;
	      g.fillOval(xu0,yu0,1,1);
	      while(x<xu1)
	      {
		   if(d<0)
		    {x++;y++;d+=d2;}
		   else  {x++;d+=d1;}
	  	  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,y,1,1);
		          break;
		   case 2:g.fillOval(x,y,1,1);
		          g.fillOval(x,y+1,1,1);
		          break;
		   case 3:g.fillOval(x,y,1,1);
		          g.fillOval(x,y+1,1,1);
		          g.fillOval(x,y-1,1,1);
		          break;
		   case 4: {if(point%2==0){
        	     	   for(j=0;j<=j/2;j++)
        	     	       g.fillOval(x,y+j,1,1);
        	     	        g.fillOval(x,y-j+1,1,1);}
        	     	 else {for(j=0;j<=j/2;j++)
        	     	        g.fillOval(x,y+j,1,1);
        	     	        g.fillOval(x,y-j,1,1);}
        	             break;}
		   }
	     }//while 
	     break;    
	   case 3:
	      d=a-2*b;
	      d1=-2*b;
	      d2=2*(a-b);
	      x=xu0;
      	  y=yu0;
	      g.fillOval(xu0,yu0,1,1);
	      while(y>yu1)
	      {
		   if(d<0)
		    {y--;x++;d+=d2;}
		   else  {y--;d+=d1;}
	  	  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,y,1,1);
		          break;
		   case 2:g.fillOval(x,y,1,1);
		          g.fillOval(x+1,y,1,1);
		          break;
		   case 3:g.fillOval(x,y,1,1);
		          g.fillOval(x+1,y,1,1);
		          g.fillOval(x-1,y,1,1);
		          break;
		    case 4: {if(point%2==0){
        	     	        for(j=0;j<=j/2;j++)
        	     	       g.fillOval(x+j,y,1,1);
        	     	        g.fillOval(x-j+1,y,1,1);}
        	     	      else {for(j=0;j<=j/2;j++)
        	     	        g.fillOval(x+j,y,1,1);
        	     	        g.fillOval(x-j,y,1,1);}
        	             break;}
		   }
	     }//while
	     break;
	   case 4:
	      d=a+2*b;
	      d1=2*b;
	      d2=2*(a+b);
	      x=xu0;
      	  y=yu0;
	      g.fillOval(xu0,yu0,1,1);
	      while(y<yu1)
	      {
		   if(d>0)
		    {y++;x++;d+=d2;}
		   else  {y++;d+=d1;}
	  	  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,y,1,1);
		          break;
		   case 2:g.fillOval(x,y,1,1);
		          g.fillOval(x+1,y,1,1);
		          break;
		   case 3:g.fillOval(x,y,1,1);
		          g.fillOval(x+1,y,1,1);
		          g.fillOval(x-1,y,1,1);
		          break;
		   case 4: {if(point%2==0){
        	     	        for(j=0;j<=j/2;j++)
        	     	       g.fillOval(x+j,y,1,1);
        	     	        g.fillOval(x-j+1,y,1,1);}
        	     	      else {for(j=0;j<=j/2;j++)
        	     	        g.fillOval(x+j,y,1,1);
        	     	        g.fillOval(x-j,y,1,1);}
        	             break;}
		   }
	     }//while
	     break;
}//switch

}//midline
public void BresenhamLine(Graphics g,Image buffer,Color c,int linestyle,int point,int xu0,int yu0,int xu1,int yu1,boolean isXOR)
{int x,y,dx,dy,i,t,e,k=0,mark=0x8000,n=0,j;
if(xu0>xu1){t=xu0;xu0=xu1;xu1=t;t=yu0;yu0=yu1;yu1=t;}
 dy=yu1-yu0;
  dx=xu1-xu0;
  if(Math.abs(dy)<=Math.abs(dx))
  if(dy>0)k=1;
  else k=2;
 if(Math.abs(dy)>Math.abs(dx))

⌨️ 快捷键说明

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