📄 draw.java
字号:
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 + -