个人主页:【😊个人主页】
文章目录
- 前言
- 爱心的数学原理
- 爱心代码
- 基本版本
- 带二种
前言
回看过去我发现我的第一篇博客竟然是一篇关于C语言爱心代码的博客(真是个奇怪的开始),不过这么长时间过去了,我的编程语言也不再局限于C语言,今天我来介绍一些java版本的爱心代码。
爱心的数学原理
据说,心形线起源于法国的笛卡尔,他曾认识一位瑞典小公国的公主克里斯汀,并成为了公主的数学老师,并渐渐产生爱慕之心,但是被国王阻止了(想象一段狗血的剧情)。笛卡尔被迫流放回法国,对公主日夜思念便写信,但是又怕被人看到,于是就想到了用数学公式画心形线来表白心迹。
还有一种更加更广为流传的:
在坐标系中画出来是这样的:
如果你想要个更加更苗条的也不是不可以:
实心的是
爱心代码
基本版本
这个Java程序使用Swing图形创建了一个简单的爱心形状。该程序扩展了JPanel类以创建一个自定义面板,该面板覆盖paintComponent()方法来绘制爱心形状。
paintComponent()方法首先将图形对象的颜色设置为红色。然后使用getWidth()和getHeight()方法计算面板的中心点。然后,它为表示心脏顶部的多边形创建两个x和y坐标阵列。然后调用fillPolygon()方法来绘制多边形。
接下来,它设置代表心脏底部的圆的半径,并计算直径。fillArc()方法被调用两次,以绘制构成心脏底部的圆的两半。
最后,main方法创建JFrame类的一个实例,将自定义面板添加到框架中,并设置框架的大小、位置和可见性。当程序运行时,它会在窗口的中心显示一个红色的爱心。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class LoveHeart extends JPanel {
public LoveHeart() {
setPreferredSize(new Dimension(400, 400));
setBackground(Color.WHITE);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
int x = getWidth() / 2;
int y = getHeight() / 2;
int[] xPoints = {x - 100, x + 100, x};
int[] yPoints = {y - 80, y - 80, y + 70};
g.fillPolygon(xPoints, yPoints, 3);
int r = 50;
int d = r * 2;
g.fillArc(x - d / 2, y - r, d, d, 0, -180);
g.fillArc(x - d / 2, y - r, d, d, -180, -180);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Love Heart");
frame.add(new LoveHeart());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
带二种
该程序创建一个JPanel,它使用Java Graphics API绘制心脏。心形是使用圆弧和多边形的组合创建的。心脏的大小和位置由JPanel的大小决定。该程序还使用抗锯齿使心脏的边缘更平滑。心脏显示在JFrame中。
import java.awt.*;
import javax.swing.*;
public class Heart extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int width = getWidth();
int height = getHeight();
int centerX = width / 2;
int centerY = height / 2;
int size = Math.min(width, height) * 3 / 5;
g2d.translate(centerX, centerY);
g2d.scale(size / 100.0, size / 100.0);
g2d.setStroke(new BasicStroke(3));
g2d.setColor(Color.RED);
g2d.fillArc(-25, -50, 50, 50, 45, 180);
g2d.fillArc(25, -50, 50, 50, -45, 180);
int[] xPoints = {0, -15, -30, -25, 0, 25, 30, 15};
int[] yPoints = {-25, -40, -10, 20, 10, 20, -10, -40};
g2d.fillPolygon(xPoints, yPoints, xPoints.length);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Java Heart");
frame.add(new Heart());
frame.setSize(350, 350);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}