使用Java繪制一個520愛心圖案的示例代碼
一、實現(xiàn)原理
我們將使用數(shù)學(xué)方程來繪制愛心形狀。愛心曲線的數(shù)學(xué)方程有多種,這里我們使用一種簡單的心形參數(shù)方程:
- x = 16 * sin³θ
- y = 13 * cosθ - 5 * cos2θ - 2 * cos3θ - cos4θ
其中θ是角度參數(shù),范圍在0到2π之間。
二、完整代碼實現(xiàn)
import javax.swing.*;
import java.awt.*;
public class HeartShape extends JFrame {
public HeartShape() {
setTitle("520愛心");
setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
add(new HeartPanel());
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
new HeartShape().setVisible(true);
});
}
}
class HeartPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
// 設(shè)置抗鋸齒
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// 設(shè)置背景色
setBackground(Color.BLACK);
g2d.setColor(Color.RED);
// 繪制愛心
int width = getWidth();
int height = getHeight();
// 縮放和平移參數(shù),使愛心居中顯示
double scale = Math.min(width, height) / 25.0;
int translateX = width / 2;
int translateY = height / 2;
// 繪制愛心曲線
int points = 1000;
double[] xPoints = new double[points];
double[] yPoints = new double[points];
for (int i = 0; i < points; i++) {
double t = 2 * Math.PI * i / points;
// 心形參數(shù)方程
double x = 16 * Math.pow(Math.sin(t), 3);
double y = 13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t);
xPoints[i] = x * scale + translateX;
yPoints[i] = -y * scale + translateY; // 反轉(zhuǎn)Y軸
}
// 填充愛心
int[] xIntPoints = new int[points];
int[] yIntPoints = new int[points];
for (int i = 0; i < points; i++) {
xIntPoints[i] = (int) xPoints[i];
yIntPoints[i] = (int) yPoints[i];
}
// 使用多邊形填充
g2d.fillPolygon(xIntPoints, yIntPoints, points);
// 添加"520"文字
g2d.setColor(Color.WHITE);
g2d.setFont(new Font("微軟雅黑", Font.BOLD, 48));
String text = "520";
FontMetrics fm = g2d.getFontMetrics();
int textWidth = fm.stringWidth(text);
int textHeight = fm.getHeight();
g2d.drawString(text, translateX - textWidth / 2, translateY + textHeight / 2);
}
}
三、代碼解析
1.HeartShape類:繼承自JFrame,是程序的主窗口。
- 設(shè)置窗口標(biāo)題為"520愛心"
- 設(shè)置窗口大小為800x600
- 添加HeartPanel作為內(nèi)容面板
2.HeartPanel類:繼承自JPanel,負責(zé)繪制愛心圖形。
paintComponent方法中實現(xiàn)繪圖邏輯- 使用Graphics2D進行繪圖,開啟抗鋸齒
- 設(shè)置黑色背景和紅色愛心顏色
- 使用心形參數(shù)方程計算愛心形狀的點坐標(biāo)
- 對坐標(biāo)進行縮放和平移,使愛心居中顯示
- 使用多邊形填充愛心
- 在愛心中央添加"520"白色文字
四、運行效果
運行程序后,你將看到一個黑色背景的窗口,中央有一個紅色的愛心圖案,愛心中央有白色的"520"字樣。
五、擴展與改進
- 動畫效果:可以添加動畫,讓愛心有跳動效果
- 顏色變化:可以讓愛心顏色漸變或閃爍
- 自定義文字:可以修改代碼,讓用戶輸入自定義文字
- 3D效果:可以使用Java 3D庫創(chuàng)建3D愛心
六、總結(jié)
通過這個教程,我們學(xué)習(xí)了如何使用Java繪制一個數(shù)學(xué)上的愛心圖形,并在其中添加"520"文字。這種技術(shù)可以應(yīng)用于各種圖形界面程序中,如游戲、動畫或浪漫的表白程序。
到此這篇關(guān)于使用Java繪制一個520愛心圖案的示例代碼的文章就介紹到這了,更多相關(guān)Java繪制愛心圖案內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java多線程編程實戰(zhàn)之模擬大量數(shù)據(jù)同步
這篇文章主要介紹了Java多線程編程實戰(zhàn)之模擬大量數(shù)據(jù)同步,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
詳解SpringBoot中自定義starter的開發(fā)與使用
starter是SpringBoot中非常重要的一個機制,他是基于約定優(yōu)于配置的思想所衍生出來的,本文主要介紹了SpringBoot中自定義starter的開發(fā)與使用,感興趣的可以了解下2023-09-09
Spring Security靈活的PasswordEncoder加密方式解析
這篇文章主要介紹了Spring Security靈活的PasswordEncoder加密方式解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
Java?ServletContext與ServletConfig接口使用教程
ServletConfig對象,叫Servlet配置對象。主要用于加載配置文件的初始化參數(shù)。我們知道一個Web應(yīng)用里面可以有多個servlet,如果現(xiàn)在有一份數(shù)據(jù)需要傳給所有的servlet使用,那么我們就可以使用ServletContext對象了2022-09-09
五種SpringBoot實現(xiàn)數(shù)據(jù)加密存儲的方式總結(jié)
這篇文章主要為大家詳細介紹了五種常見數(shù)據(jù)加密存儲的方法(結(jié)合SpringBoot和MyBatisPlus框架進行實現(xiàn)),文中的示例代碼講解詳細,需要的可以參考下2023-11-11

