程序员专属浪漫:如何用java代码画❤️

有位小伙伴说,看到一个帖子,一个计算机博士接亲时,要求现场写代码,5分钟做出一个爱心。我们就看看如何用java设计出心形的代码。

我找了一下,发现方法竟然很多,我们就来见识一下,最后我们看一下如何用简单的java代码实现一个心。

一.❤️的数学背景

据说,心形线起源于法国的笛卡尔,他曾认识一位瑞典小公国的公主克里斯汀,并成为了公主的数学老师,并渐渐产生爱慕之心,但是被国王阻止了(想象一段狗血的剧情)。笛卡尔*流放回法国,对公主日夜思念便写信,但是又怕被人看到,于是就想到了用数学公式画心形线来表白心迹。

笛卡尔的心形线是这样的:

程序员专属浪漫:如何用java代码画❤️

这个心有点肥是不?看一个更广为流传的:

程序员专属浪漫:如何用java代码画❤️

在坐标系中画出来是这样的:

程序员专属浪漫:如何用java代码画❤️ 

想要个更苗条的是不:

程序员专属浪漫:如何用java代码画❤️

还想要个实心的是不:

 程序员专属浪漫:如何用java代码画❤️

 如果想要更好看的,就需要matlab等工具进行渲染了

二.java 实现❤️

首先来一个7行就能搞定的:

    public  static  void heart1(){
        float x,y,a;
        for(y=1.3f;y>-1.1f;y-=0.06f){   //这里的参数皆可以调,条件就是看着顺眼
            for(x=-1.2f;x<=1.2f;x+=0.025f){
                a=x*x+y*y-1;
                System.out.print(a*a*a-x*x*y*y*y<=0.0f?' ':'$');
            }
            System.out.println();
        }
    }

画出来的结果是这样的:

 程序员专属浪漫:如何用java代码画❤️

再来一个心中有无数爱的:

public static  void heart2(){
        double x,y,a;
        char s[]=new char[]{'I',' ','l','o','v','e',' ','y','o','u','!'};
        int index=0;
        for(y=1.3f;y>-1.1f;y-=0.06f){
            index=0;
            for(x=-1.1f;x<=1.1f;x+=0.025f){
                double result=x*x+pow((5.0*y/4.0-sqrt(abs(x))),2);
                if(result<=1){
                    System.out.print((s[index]));
                    index=(index+1)%11;
                }
                else{
                    System.out.print(' ');
                }
            }
            System.out.println(" ");
        }
    }

 执行之后是这样的:

程序员专属浪漫:如何用java代码画❤️

 怎么样,是不是程序员的专属浪漫?

 

三.一个双心的例子

有个小伙伴给贡献了一段代码,效果是这样的:

程序员专属浪漫:如何用java代码画❤️

代码如下:

import javax.swing.*;
import java.awt.*;
​
import static java.lang.Math.*;
​
public class DemoTest extends JFrame {
    private static final long serialVersionUID = -1284128891908775645L;
​
    // 定义加载窗口大小
​
    public static final int GAME_WIDTH = 500;
​
    public static final int GAME_HEIGHT = 500;
    // 获取屏幕窗口大小
    public static final int WIDTH = Toolkit.getDefaultToolkit().getScreenSize().width;
​
    public static final int HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height;
​
    public DemoTest() {
​
        // 设置窗口标题
        this.setTitle("心形曲线");
        // 设置窗口初始位置
        this.setLocation((WIDTH - GAME_WIDTH) / 2, (HEIGHT - GAME_HEIGHT) / 2);
        // 设置窗口大小
        this.setSize(GAME_WIDTH, GAME_HEIGHT);
        // 设置背景色
        this.setBackground(Color.BLACK);
        // 设置窗口关闭方式
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 设置窗口显示
        this.setVisible(true);
    }
​
    @Override
    public void paint(Graphics g) {
        double x, y, r;
        Image OffScreen = createImage(GAME_WIDTH, GAME_HEIGHT);
        Graphics drawOffScreen = OffScreen.getGraphics();
        for (int i = 0; i < 90; i++) {
            for (int j = 0; j < 90; j++) {
                r = Math.PI / 45 * i * (1 - Math.sin(Math.PI / 45 * j)) * 18;
                x = r * Math.cos(Math.PI / 45 * j) * Math.sin(Math.PI / 45 * i) + GAME_WIDTH / 2;
                y = -r * Math.sin(Math.PI / 45 * j) + GAME_HEIGHT / 4;
                //设置画笔颜色
                drawOffScreen.setColor(Color.PINK);
                // 绘制椭圆
                drawOffScreen.fillOval((int) x, (int) y, 2, 2);
            }
            // 生成图片
            g.drawImage(OffScreen, 0, 0, this);
        }
    }
​
    public static void main(String[] args) {
        DemoTest demo = new DemoTest();
        demo.setVisible(true);
    }
​
}

 

 

 

 

 

上一篇:博弈概念


下一篇:python爬虫BeautifulSoup库抓取500彩票网竞彩足球信息并在excel表中对中奖赔率设置格式