一、序言:
原本在宿舍打打代码,突然间我的一个扑街死党,给我发来这道题,看得我突然一脸懵逼,随后百度下,发现这叫做玫瑰函数既然函数有了,那就可以开干了,本着以点画线的思想,就正式操作起来。
二、正式代码
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
来源:CSDN
作者:Chen_RuiMin
链接:https://blog.csdn.net/Chen_RuiMin/article/details/103761826