使用Java繪制一個(gè)520愛心圖案的示例代碼
一、實(shí)現(xiàn)原理
我們將使用數(shù)學(xué)方程來繪制愛心形狀。愛心曲線的數(shù)學(xué)方程有多種,這里我們使用一種簡單的心形參數(shù)方程:
- x = 16 * sin³θ
- y = 13 * cosθ - 5 * cos2θ - 2 * cos3θ - cos4θ
其中θ是角度參數(shù),范圍在0到2π之間。
二、完整代碼實(shí)現(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,負(fù)責(zé)繪制愛心圖形。
paintComponent方法中實(shí)現(xiàn)繪圖邏輯- 使用Graphics2D進(jìn)行繪圖,開啟抗鋸齒
- 設(shè)置黑色背景和紅色愛心顏色
- 使用心形參數(shù)方程計(jì)算愛心形狀的點(diǎn)坐標(biāo)
- 對(duì)坐標(biāo)進(jìn)行縮放和平移,使愛心居中顯示
- 使用多邊形填充愛心
- 在愛心中央添加"520"白色文字
四、運(yùn)行效果
運(yùn)行程序后,你將看到一個(gè)黑色背景的窗口,中央有一個(gè)紅色的愛心圖案,愛心中央有白色的"520"字樣。
五、擴(kuò)展與改進(jìn)
- 動(dòng)畫效果:可以添加動(dòng)畫,讓愛心有跳動(dòng)效果
- 顏色變化:可以讓愛心顏色漸變或閃爍
- 自定義文字:可以修改代碼,讓用戶輸入自定義文字
- 3D效果:可以使用Java 3D庫創(chuàng)建3D愛心
六、總結(jié)
通過這個(gè)教程,我們學(xué)習(xí)了如何使用Java繪制一個(gè)數(shù)學(xué)上的愛心圖形,并在其中添加"520"文字。這種技術(shù)可以應(yīng)用于各種圖形界面程序中,如游戲、動(dòng)畫或浪漫的表白程序。
到此這篇關(guān)于使用Java繪制一個(gè)520愛心圖案的示例代碼的文章就介紹到這了,更多相關(guān)Java繪制愛心圖案內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)一個(gè)簡單的線程池代碼示例
線程池是管理線程的一個(gè)池子,通過阻塞隊(duì)列管理任務(wù),主要參數(shù)包括corePoolSize、maximumPoolSize、keepAliveTime等,這篇文章主要介紹了Java實(shí)現(xiàn)一個(gè)簡單的線程池的相關(guān)資料,需要的朋友可以參考下2024-09-09
java實(shí)用型-高并發(fā)下RestTemplate的正確使用說明
這篇文章主要介紹了java實(shí)用型-高并發(fā)下RestTemplate的正確使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
java中超過long范圍的超大整數(shù)相加算法詳解(面試高頻)
這篇文章主要介紹了java中超過long范圍的超大整數(shù)相加算法(面試高頻),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
dubbo?filter中有關(guān)bean注入和配置文件讀取方式
這篇文章主要介紹了dubbo?filter中有關(guān)bean注入和配置文件讀取方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
SpringBoot RestTemplate 簡單包裝解析
這篇文章主要介紹了SpringBoot RestTemplate 簡單包裝解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Java拷貝數(shù)組方法Arrays.copyOf()是地址傳遞的證明實(shí)例
今天小編就為大家分享一篇關(guān)于Java拷貝數(shù)組方法Arrays.copyOf()是地址傳遞的證明實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-10-10

