java awt 玫瑰图形

三世轮回 提交于 2020-01-01 13:49:45

一、序言:

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

二、正式代码


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!