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