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

📄 draw_cut.java

📁 图形学的源代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        	   }
        	  
        	x=x+increx;
        	y=y+increy;
        }
	}//DDALine
	
	public void MidLine( Graphics g,Image buffer,Color c,int linestyle,int point,int xu0,int yu0,int xu1,int yu1,boolean isXOR)                                                  //DDA算法
	{
		int a,b,d1,d2,d,x,y,t,dy,dx,k=0,mark=0x8000,n=0;
	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;
		   }
	     }//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;
		   }
	     }//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;
		   }
	     }//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;
		   }//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;
		   }
	     }//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;
		   }
	     }//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;
		   }
	     }//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;
		   }
	     }//while
	     break;
       }//switch
	}//MidLine
	
	
	public void BreLine( Graphics g,Image buffer,Color c,int linestyle,int point,int xu0,int yu0,int xu1,int yu1,boolean isXOR)                                                  //DDA算法
	{
		int e,x,y,t,dy,dx,k=0,mark=0x8000,n=0;
	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))
	   if(dy>0)k=3;
	   else k=4;
	     
	/*在屏幕上画	*/
        if(isXOR) g.setXORMode(c);  
		else 
		{
		    g.setPaintMode();
			g.setColor(c);
			
		}

	    	
	switch(k){
	case 1:
	      e=-dx;
	      x=xu0;
      	  y=yu0;
	      g.fillOval(xu0,yu0,1,1);
	      while(x<xu1)
	      {	 
	       e+=2*dy;
	       if(e>=0)
		    { x++; y++; e-=2*dx; }
		   else  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,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;
		   }
	     }//while
	     
	     break;
	 case 2:
	      e=dx;
	      x=xu0;
      	  y=yu0;
	      g.fillOval(xu0,yu0,1,1);
	      while(x<xu1)
		  {
		  	e+=2*dy; 
		   if(e<=0)
		    {x++;y--;e+=2*dx;}
		   else  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,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;
		   }
	     }//while  
	     break;   
	   case 3:
	      e=-dy;
	      x=xu0;
      	  y=yu0;
	      g.fillOval(xu0,yu0,1,1);
	      while(y<yu1)
		  { 
		   e+=2*dx;
		   if(e>=0)
		    {y++;x++;e-=2*dy;}
		   else  y++;
	  	  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;
		   }
	     }//while
	     break;
	   case 4: 
	      e=dy;
	      x=xu0;
      	  y=yu0; 
	      g.fillOval(xu0,yu0,1,1);
	      while(y>yu1)
		  {
		  	e+=2*dx; 
		   if(e>=0)
		    {y--;x++;e+=2*dy;}
		   else  y--;
	  	  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;

⌨️ 快捷键说明

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