【Java】画心形图形

开始看到的是这个爱心图形,挺好看的(感谢这些前端巨佬): 

HTML流光爱心_爱心代码html-优快云博客

本来想着自己看下这个源代码能不能实现,看了下源代码其实非常复杂。

在看代码的过程中发现,源代码里边给出了爱心坐标点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(); //更新窗口
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值