楼主,你到底是要画圆的算法 还是要实现一个画圆的功能? 如果是算法的话,现在比较常用的是Bresenham算法.代码如下: public static void drawCircle(Graphics g,int x0,int y0 ,int r){ int x = 0; int y = r; int d = 3 - 2 * r; while(x < y){ copyPot(g,x0,y0,x,y); if(d<0) d += 4 * x + 6; else{ d += 4 * (x-y) + 10; y --; } x ++; } if(x == y) copyPot(g,x0,y0,x,y); }
如果是算法的话,现在比较常用的是Bresenham算法.代码如下:
public static void drawCircle(Graphics g,int x0,int y0 ,int r){
int x = 0;
int y = r;
int d = 3 - 2 * r;
while(x < y){
copyPot(g,x0,y0,x,y);
if(d<0)
d += 4 * x + 6;
else{
d += 4 * (x-y) + 10;
y --;
}
x ++;
}
if(x == y)
copyPot(g,x0,y0,x,y);
}
private void copyPot(Graphics g,int x0,int y0,int x,int y){
g.drawLine(x0+x,y0+y,x0+x,y0+y);
g.drawLine(x0+y,y0+x,x0+y,y0+x);
g.drawLine(x0+y,y0-x,x0+y,y0-x);
g.drawLine(x0+x,y0-y,x0+x,y0-y);
g.drawLine(x0-x,y0-y,x0-x,y0-y);
g.drawLine(x0-y,y0-x,x0-y,y0-x);
g.drawLine(x0-y,y0+x,x0-y,y0+x);
g.drawLine(x0-x,y0+y,x0-x,y0+y);
}
好象Java中没有画点的算法,所以用画两个具有相同端点的画县函数来代替.如果是实现一个画圆的功能,那就可以直接使用Graphics类中的drawOval(int x,int y,int w,int h),fillOval(int x,int y,int w,int h)来实现,具体方法是:监听MouseListener 和 MouseMotionListener 鼠标按下是记录坐标x1,y1. 鼠标移动的时候记录坐标x2,y2.调用g.drawOval(x1,y1,Math.abs(x1-x2),Math.abs(y1-y2))来画圆,并且repaint().大概是这样了.
都没搞明白你想干什么,给点context行不?