开始看到的是这个爱心图形,挺好看的(感谢这些前端巨佬):
HTML流光爱心_爱心代码html-CSDN博客
本来想着自己看下这个源代码能不能实现,看了下源代码其实非常复杂。
在看代码的过程中发现,源代码里边给出了爱心坐标点x,y变化的函数所在的网址:
Heart Curve -- from Wolfram MathWorld
其中不同的爱心坐标点x,y变化的函数不太一样(感谢这些数学大佬):
感觉第二排最右边这个好看,来实现一下,并且还有对应的坐标方程式,那这就简单多了,直接转化为Java代码:
x = 16 * Math.sin(t) * Math.sin(t) * Math.sin(t);
y = 13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t);
这里需要注意,在实现的时候,需要把x,y坐标倍数放大些,并且需要把x,y的坐标平移下,运行结果:
Java源代码:
import javax.swing.*;
import java.awt.*;
public class Heart extends JFrame {
Graphics graphics; //画笔
double x;
double y;
double t=0;
Heart() {
setLayout(null); //关闭窗口布局管理器
setSize(700, 1000); //设置窗口大小
setLocationRelativeTo(null); //窗口显示在屏幕中间。
setVisible(true); //显示窗口
graphics = getContentPane().getGraphics(); //初始化画笔
graphics.setFont(new Font("", Font.BOLD, 18)); //设置画画的字符大小
}
public void updateWindow()
{
//https://mathworld.wolfram.com/HeartCurve.html
x = 16 * Math.pow(Math.sin(t), 3);
y = 13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t);
x *= 10;
y *= 10;
y += 400;
x += 200;
graphics.drawString("o", (int )x, (int )y);
t += 0.001;
}
public static void main(String[] args) {
Heart heart = new Heart();
while (true) {
heart.updateWindow(); //更新窗口
}
}
}