日期:2014-05-20  浏览次数:20791 次

Java 怎么画出比较精细的圆
我用Graphics和Graphics2D,画的圆都比较粗糙,锯齿很明显啊,尤其食圆比较小的时候,我想问一下,是Java画的圆本来就粗糙还是需要什么技巧,怎么样才能画出比较好看的圆形。谢谢

------解决方案--------------------
Java code

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D;

import javax.swing.*; 

public class testpaint extends JFrame{
    public static void main(String[] args) { 
        testpaint t=new testpaint(); 
        t.setLocation(100, 100); 
        t.setSize(500, 400); 
        t.getContentPane().setBackground(Color.green); 
        t.setVisible(true); 
    } 
    public void paint(Graphics g){
        super.paint(g);
        Graphics2D g2 = (Graphics2D)g;
        Ellipse2D e = new Ellipse2D.Double(10,50,70,70);
        //加上下面这句就能变的圆滑了 
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setPaint(Color.RED);
        g2.draw(e);
        //g2.fill(e);
    }
}

------解决方案--------------------
Java code


Ellipse2D.Double
public Ellipse2D.Double()构造一个新 Ellipse2D,并将其初始化为:位置 (0, 0)、大小 (0, 0)。 


--------------------------------------------

Ellipse2D.Double
public Ellipse2D.Double(double x,
                        double y,
                        double w,
                        double h)根据指定坐标构造和初始化 Ellipse2D。 

参数:
x, y - 边界矩形的坐标
w - 矩形的宽度
h - 矩形的高度

------解决方案--------------------
这样的圆不好
应该另外建立一个坐标系(类似数学中的直角坐标系),在这个坐标系中定义圆的圆心、半径等,并计算圆上点的轨迹,将这些转换为屏幕坐标(就是你上面用到的),进行描点画出圆,这样的同心圆就没什么问题了
------解决方案--------------------
可以优化,但绝对园不太可能,尤其是半径比较小。关于同心园是因为不同圆心的问题
------解决方案--------------------
same 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D;

import javax.swing.*; 

public class testpaint extends JFrame{
public static void main(String[] args) { 
testpaint t=new testpaint(); 
t.setLocation(100, 100); 
t.setSize(500, 400); 
t.getContentPane().setBackground(Color.green); 
t.setVisible(true); 

public void paint(Graphics g){
super.paint(g);
Graphics2D g2 = (Graphics2D)g;
Ellipse2D e = new Ellipse2D.Double(10,50,70,70);
//加上下面这句就能变的圆滑了 
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(Color.RED);
g2.draw(e);
//g2.fill(e);
}
}