爱心代码大全:用多种语言实现高像素爱心

时间:2025-02-08 11:36:35

情人节马上又要来喽,之前写过一篇初级版的,现在试试进阶版

在编程的世界里,创造一个美观且高像素的爱心图案不仅能够展示你的编程技巧,还能带来视觉上的享受。本文将展示如何使用多种编程语言来实现高像素的爱心图案,并附上详细的代码和注释。

  1. Python 1.1 使用Matplotlib绘制爱心 Matplotlib 是一个强大的绘图库,可以用来绘制各种复杂的图形,包括爱心。
import numpy as np
import matplotlib.pyplot as plt

# 定义爱心的参数方程
t = np.linspace(0, 2 * np.pi, 1000)
x = 16 * np.sin(t)**3
y = 13 * np.cos(t) - 5 * np.cos(2*t) - 2 * np.cos(3*t) - np.cos(4*t)

# 创建图形
plt.figure(figsize=(8, 8))
plt.plot(x, y, color='red')
plt.fill(x, y, 'red')  # 填充爱心内部
plt.title('Heart Shape using Parametric Equations')
plt.axis('equal')  # 保持x和y轴的比例相同
plt.axis('off')  # 关闭坐标轴
plt.show()

1.2 使用Pillow库绘制爱心

Pillow 是一个图像处理库,可以用来创建和操作图像。

from PIL import Image, ImageDraw

# 创建一个空白图像
width, height = 400, 400
image = Image.new('RGB', (width, height), 'white')
draw = ImageDraw.Draw(image)

# 定义爱心的参数方程
t = np.linspace(0, 2 * np.pi, 1000)
x = 16 * np.sin(t)**3
y = 13 * np.cos(t) - 5 * np.cos(2*t) - 2 * np.cos(3*t) - np.cos(4*t)

# 将坐标缩放到图像大小
x = (x + 16) * (width / 32)
y = (-y + 13) * (height / 26)

# 绘制爱心
points = list(zip(x, y))
draw.polygon(points, fill='red')

# 保存图像
image.save('heart.png')
image.show()
  1. JavaScript 2.1 使用Canvas绘制爱心 HTML5 Canvas 提供了一个强大的绘图环境,可以用来绘制各种图形。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Heart Shape</title>
    <style>
        canvas {
            display: block;
            margin: 0 auto;
            background-color: white;
        }
    </style>
</head>
<body>
    <canvas id="heartCanvas" width="400" height="400"></canvas>
    <script>
        const canvas = document.getElementById('heartCanvas');
        const ctx = canvas.getContext('2d');

        // 定义爱心的参数方程
        const points = [];
        for (let t = 0; t <= 2 * Math.PI; t += 0.01) {
            const x = 16 * Math.pow(Math.sin(t), 3);
            const y = 13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t);
            points.push({ x, y });
        }

        // 将坐标缩放到画布大小
        const scale = 10;
        const offsetX = 200;
        const offsetY = 200;
        points.forEach(point => {
            point.x = point.x * scale + offsetX;
            point.y = -point.y * scale + offsetY;
        });

        // 绘制爱心
        ctx.beginPath();
        ctx.moveTo(points[0].x, points[0].y);
        points.forEach(point => ctx.lineTo(point.x, point.y));
        ctx.closePath();
        ctx.fillStyle = 'red';
        ctx.fill();
    </script>
</body>
</html>
  1. Java 3.1 使用JavaFX绘制爱心 JavaFX 是一个用于构建富互联网应用程序的框架,可以用来绘制图形。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class HeartShape extends Application {
    @Override
    public void start(Stage primaryStage) {
        // 创建画布
        Canvas canvas = new Canvas(400, 400);
        GraphicsContext gc = canvas.getGraphicsContext2D();

        // 定义爱心的参数方程
        double[] xPoints = new double[1000];
        double[] yPoints = new double[1000];
        for (int i = 0; i < 1000; i++) {
            double t = 2 * Math.PI * i / 1000;
            xPoints[i] = 16 * Math.pow(Math.sin(t), 3);
            yPoints[i] = 13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t);
        }

        // 将坐标缩放到画布大小
        double scale = 10;
        double offsetX = 200;
        double offsetY = 200;
        for (int i = 0; i < 1000; i++) {
            xPoints[i] = xPoints[i] * scale + offsetX;
            yPoints[i] = -yPoints[i] * scale + offsetY;
        }

        // 绘制爱心
        gc.setFill(Color.RED);
        gc.fillPolygon(xPoints, yPoints, 1000);

        // 创建场景并显示
        StackPane root = new StackPane();
        root.getChildren().add(canvas);
        Scene scene = new Scene(root, 400, 400);
        primaryStage.setTitle("Heart Shape");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
  1. C++ 4.1 使用SFML绘制爱心 SFML 是一个简单而强大的C++多媒体库,可以用来创建图形应用程序。
#include <SFML/Graphics.hpp>
#include <cmath>

int main() {
    // 创建窗口
    sf::RenderWindow window(sf::VideoMode(400, 400), "Heart Shape");

    // 定义爱心的参数方程
    const int numPoints = 1000;
    sf::VertexArray heart(sf::LineStrip, numPoints);
    for (int i = 0; i < numPoints; ++i) {
        double t = 2 * M_PI * i / numPoints;
        double x = 16 * std::pow(std::sin(t), 3);
        double y = 13 * std::cos(t) - 5 * std::cos(2 * t) - 2 * std::cos(3 * t) - std::cos(4 * t);
        heart[i].position = sf::Vector2f(x * 10 + 200, -y * 10 + 200);
        heart[i].color = sf::Color::Red;
    }

    // 主循环
    while (window.isOpen()) {
        sf::Event event;
        while (window.pollEvent(event)) {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.draw(heart);
        window.display();
    }

    return 0;
}
  1. C# 5.1 使用WPF绘制爱心 WPF (Windows Presentation Foundation) 是一个用于构建富用户界面应用程序的框架。
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Shapes;

namespace HeartShape
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DrawHeart();
        }

        private void DrawHeart()
        {
            // 创建一个PathGeometry对象
            PathGeometry heartGeometry = new PathGeometry();
            PathFigure heartFigure = new PathFigure();
            heartFigure.IsClosed = true;

            // 定义爱心的参数方程
            const int numPoints = 1000;
            for (int i = 0; i < numPoints; i++)
            {
                double t = 2 * Math.PI * i / numPoints;
                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);
                Point point = new Point(x * 10 + 200, -y * 10 + 200);
                if (i == 0)
                {
                    heartFigure.StartPoint = point;
                }
                else
                {
                    LineSegment lineSegment = new LineSegment(point, true);
                    heartFigure.Segments.Add(lineSegment);
                }
            }

            heartGeometry.Figures.Add(heartFigure);

            // 创建一个Path对象并设置其Geometry
            Path heartPath = new Path();
            heartPath.Data = heartGeometry;
            heartPath.Stroke = Brushes.Red;
            heartPath.Fill = Brushes.Red;

            // 将Path添加到布局中
            this.Content = heartPath;
        }
    }
}
  1. Go 6.1 使用Golang和Fyne库绘制爱心 Fyne 是一个用于构建跨平台GUI应用程序的Go库。
package main

import (
    "fyne.io/fyne/v2"
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/canvas"
    "fyne.io/fyne/v2/container"
    "math"
)

func main() {
    a := app.New()
    w := a.NewWindow("Heart Shape")

    // 定义爱心的参数方程
    numPoints := 1000
    points := make([]fyne.Position, numPoints)
    for i := 0; i < numPoints; i++ {
        t := 2 * math.Pi * float64(i) / float64(numPoints)
        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)
        points[i] = fyne.NewPos(float32(x*10+200), float32(-y*10+200))
    }

    // 创建一个多边形
    heart := canvas.NewPolygon(points)
    heart.StrokeColor = color.RGBA{255, 0, 0, 255}
    heart.FillColor = color.RGBA{255, 0, 0, 255}

    // 创建一个容器并添加多边形
    content := container.NewWithoutLayout(heart)
    heart.Resize(fyne.NewSize(400, 400))
    heart.Move(fyne.NewPos(0, 0))

    w.SetContent(content)
    w.Resize(fyne.NewSize(400, 400))
    w.ShowAndRun()
}


每种语言都有其独特的库和方法,选择适合你的语言和工具,可以让你的项目更加丰富多彩。希望这些示例能够激发你的创造力,并帮助你构建出令人惊叹的图形作品。