java awt 玫瑰图形

一、序言:

原本在宿舍打打代码,突然间我的一个扑街死党,给我发来这道题,看得我突然一脸懵逼,随后百度下,发现这叫做玫瑰函数既然函数有了,那就可以开干了,本着以点画线的思想,就正式操作起来。
在这里插入图片描述

二、正式代码


import java.awt.*;

public class roseGraphics {

    public static void main(String[] args) {
        Frame f = new Frame("玫瑰图形");
        cdPanel cd = new cdPanel();
        f.add(cd);

        f.setSize(500, 500);
        f.setVisible(true);
        f.setLocationRelativeTo(null);//窗体居中
    }

}

//创建cdPanel类继承Panel类,重写Panel类的paint()方法
class cdPanel extends Panel {
    //重写Panel类的paint()方法
    @Override
    public void paint(Graphics graphics) {

        //循环周期数
        int n = 100;

        //坐标偏移
        int offsetX = 200;
        int offsetY = 200;
        //偏转角度
        double offsetAngle = Math.PI / 2;

        for (int i = 0; i <= 360 * n; i++) {
            //玫瑰函数 ρ=a*sin(nθ),a为定长,n为整数. 这里a=1,n=2,可以自行修改,变换图案
            double r = Math.sin(2 * i +offsetAngle) * 100;

            //根据极坐标变换直角坐标 ρ=a*sin(nθ),a为定长,n为整数.
            double x = Math.cos(i + offsetAngle) * r;

            double y = Math.sin(i + offsetAngle) * r;

           //画半径为1像素的圆点
           graphics.drawOval(offsetX + (int) x, offsetY + (int) y, 1, 1);        }
    }
}

大概道理相信学过极坐标知识和笛卡尔坐标系的知识的人应该能看懂,大概道理就是那样,代入函数一直描点。

最后附上:
玫瑰图形百科:https://dwz.cn/ARJBW63i
极坐标转换:https://wenku.baidu.com/view/4c5a890b55270722192ef779.html

发布了40 篇原创文章 · 获赞 11 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Chen_RuiMin/article/details/103761826
AWT
今日推荐