首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绘制Rosetta形状

绘制Rosetta形状
EN

Stack Overflow用户
提问于 2013-10-02 14:27:15
回答 2查看 463关注 0票数 0

我必须做的项目只有一个draw.oval函数和draw.arc函数。然而,我真的希望我能按照你的方式来做。这就是我现在所拥有的,但它仍然不能正确排列。有什么见解吗?谢谢!

代码语言:javascript
复制
//**********************************************************************
// Fish.Java    Louis Colucci
// Draws a rosetta
//**********************************************************************

import javax.swing.JApplet;

import java.awt.*;

public class Rosetta extends JApplet
{
    public void paint (Graphics page)
    {


        setBackground (Color.white);
        page.setColor (Color.black);


        //Draws the body

        page.drawOval(360, 360, 360,360);
        page.drawArc(360,180, 360,360,360,360);
        page.drawArc(360,540, 360,360,360,360);

        page.drawArc(525,435, 360,360,360,360);
        page.drawArc(525,285, 360,360,360,360);
        page.drawArc(195,435, 360,360,360,360);
        page.drawArc(195,285, 360,360,360,360);

    }

}
EN

回答 2

Stack Overflow用户

发布于 2013-10-02 15:26:01

就像..。

  1. 停止使用幻数,在渲染时使用实际已知值
  2. 调用super.paint(...),这是非常非常重要的,如果你不这样做,你会得到图形故障。实际上,使用一个JPanel并覆盖它的paintComponent方法,并在那里进行自定义绘制(但别忘了调用super.paintComponent)

..。

代码语言:javascript
复制
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.text.NumberFormat;
import javax.swing.JApplet;

public class Rosetta extends JApplet {

    public void paint(Graphics page) {

        super.paint(page);

        page.setColor(Color.black);

        int width = getWidth();
        int height = getHeight();

        int roseWidth = Math.min(width / 2, height / 2);
        int roseHeight = roseWidth;

        int centerX = width / 2;
        int centerY = height / 2;

        int x = (width - roseWidth) / 2;
        int y = (height - roseHeight) / 2;

        page.drawRect(x, y, roseWidth, roseHeight);
        page.drawOval(x, y, roseWidth, roseHeight);

        Graphics2D g2d = (Graphics2D) page;
        float angle = 30f;
        AffineTransform t = g2d.getTransform();
        g2d.transform(AffineTransform.getRotateInstance(Math.toRadians(angle), centerX, centerY));
        angle = 60f;
        for (int index = 0; index < 6; index++) {
            g2d.transform(AffineTransform.getRotateInstance(Math.toRadians(angle), centerX, centerY));
            g2d.drawArc(x + (roseWidth / 2), y, roseWidth, roseHeight, 360, 360);
        }
        g2d.transform(t);
    }

}
票数 1
EN

Stack Overflow用户

发布于 2014-09-29 10:14:46

试试这个:

代码语言:javascript
复制
import javax.swing.JApplet;
import java.awt.*;

public class Rosetta extends JApplet

{

public void paint(Graphics page)

       {
              final int MID = 130;
              final int TOP = 75;

              page.drawArc(MID,TOP-76,150,150,210,121);
              page.drawArc(MID,TOP+76,150,150,30,120);
              page.drawArc(MID+65,TOP+35,150,150,90,120);
              page.drawArc(MID-65,TOP+35,150,150,330,120);
              page.drawArc(MID-65,TOP-35,150,150,270,120);
              page.drawArc(MID+65,TOP-35,150,150,150,121);

              page.setColor(Color.red);
              page.drawOval(MID-1,TOP,151,151);
              }         
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19131097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档