当前位置: 代码迷 >> J2SE >> Java 如何画出比较精细的圆
  详细解决方案

Java 如何画出比较精细的圆

热度:384   发布时间:2016-04-24 18:03:05.0
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.Doublepublic Ellipse2D.Double()构造一个新 Ellipse2D,并将其初始化为:位置 (0, 0)、大小 (0, 0)。 --------------------------------------------Ellipse2D.Doublepublic 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);
}
}

  相关解决方案