高级Python爱心代码分享

以下是一些创意且高级的Python爱心代码实现,使用不同的技术和方法来生成爱心图案:

目录

1. 3D旋转爱心 (使用matplotlib)

2. 动态粒子爱心 (使用pygame)

3. ASCII艺术爱心 (带颜色和动画)

4. 爱心树 (分形实现)

5. 爱心烟花 (使用turtle图形)


1. 3D旋转爱心 (使用matplotlib)

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import animation

def heart_3d(x, y, z):
    return (x**2 + (9/4)*y**2 + z**2 - 1)**3 - x**2*z**3 - (9/80)*y**2*z**3

def plot_heart():
    fig = plt.figure(figsize=(10, 8))
    ax = fig.add_subplot(111, projection='3d')
    
    x = np.linspace(-1.5, 1.5, 100)
    y = np.linspace(-1.5, 1.5, 100)
    z = np.linspace(-1.5, 1.5, 100)
    X, Y, Z = np.meshgrid(x, y, z)
    
    vol = heart_3d(X, Y, Z)
    verts, faces, _, _ = marching_cubes(vol, 0, spacing=(0.1, 0.1, 0.1))
    
    ax.plot_trisurf(verts[:, 0], verts[:, 1], faces, verts[:, 2],
                    color='red', lw=0, alpha=0.8)
    
    ax.set_xlim(-1.5, 1.5)
    ax.set_ylim(-1.5, 1.5)
    ax.set_zlim(-1.5, 1.5)
    ax.axis('off')
    
    def rotate(angle):
        ax.view_init(30, angle)
        return fig,
    
    anim = animation.FuncAnimation(fig, rotate, frames=360, interval=50)
    plt.show()
    return anim

# 需要安装scikit-image库来使用marching_cubes
from skimage.measure import marching_cubes
plot_heart()

2. 动态粒子爱心 (使用pygame)

import pygame
import numpy as np
import random
import math

pygame.init()

width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("粒子爱心")

particles = []
for i in range(500):
    x = random.randint(0, width)
    y = random.randint(0, height)
    particles.append([x, y, random.uniform(0.5, 2), random.uniform(0, 2*math.pi)])

def heart_shape(t, scale=15):
    x = 16 * (math.sin(t) ** 3)
    y = 13 * math.cos(t) - 5 * math.cos(2*t) - 2 * math.cos(3*t) - math.cos(4*t)
    return width//2 + x * scale, height//2 - y * scale

running = True
clock = pygame.time.Clock()

while running:
    screen.fill((0, 0, 0))
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    # 更新粒子位置
    for i, p in enumerate(particles):
        t = p[3]
        p[3] += 0.01
        if p[3] > 2 * math.pi:
            p[3] = 0
        
        target_x, target_y = heart_shape(p[3], scale=20)
        p[0] += (target_x - p[0]) * 0.05
        p[1] += (target_y - p[1]) * 0.05
        
        color = (255, int(100 + 100 * math.sin(p[3])), int(100 + 100 * math.sin(p[3])))
        pygame.draw.circle(screen, color, (int(p[0]), int(p[1])), int(p[2]))
    
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

3. ASCII艺术爱心 (带颜色和动画)

import time
import os
import math
from colorama import init, Fore

init()

def heart_shape(t, scale=1):
    x = 16 * (math.sin(t) ** 3)
    y = 13 * math.cos(t) - 5 * math.cos(2*t) - 2 * math.cos(3*t) - math.cos(4*t)
    return x * scale, y * scale

def draw_heart():
    for _ in range(100):
        os.system('cls' if os.name == 'nt' else 'clear')
        for y in range(30, -30, -1):
            line = ""
            for x in range(-60, 60):
                char = " "
                for t in range(0, 628, 10):
                    hx, hy = heart_shape(t/100, scale=10)
                    if abs(x/2 - hx) < 1 and abs(y - hy) < 1:
                        r = (t * 0.4) % 256
                        g = (t * 0.6) % 256
                        b = (t * 0.8) % 256
                        if r > 200 or g > 200 or b > 200:
                            char = Fore.RED + "❤" + Fore.RESET
                        else:
                            char = Fore.MAGENTA + "♥" + Fore.RESET
                        break
                line += char
            print(line)
        time.sleep(0.1)

draw_heart()

4. 爱心树 (分形实现)

import turtle
import random
import colorsys

def draw_tree(branch_len, t, hue=0.1):
    if branch_len < 3:
        return
    else:
        # 绘制爱心作为叶子
        if branch_len < 15:
            t.penup()
            t.goto(t.xcor(), t.ycor() - 5)
            t.pendown()
            t.fillcolor(colorsys.hsv_to_rgb(hue, 1, 1))
            t.begin_fill()
            t.left(140)
            t.forward(10)
            for _ in range(200):
                t.right(1)
                t.forward(0.1)
            t.left(120)
            for _ in range(200):
                t.right(1)
                t.forward(0.1)
            t.forward(10)
            t.end_fill()
            t.penup()
            t.goto(t.xcor(), t.ycor() + 5)
            t.pendown()
            return
        
        angle = random.randint(15, 45)
        sf = random.uniform(0.6, 0.8)
        t.pensize(branch_len / 10)
        t.forward(branch_len)
        
        # 右分支
        t.right(angle)
        draw_tree(branch_len * sf, t, hue + 0.02)
        
        # 左分支
        t.left(angle * 2)
        draw_tree(branch_len * sf, t, hue + 0.02)
        
        t.right(angle)
        t.backward(branch_len)

def main():
    t = turtle.Turtle()
    screen = turtle.Screen()
    screen.bgcolor("black")
    t.speed(0)
    t.left(90)
    t.penup()
    t.goto(0, -200)
    t.pendown()
    t.color("brown")
    draw_tree(100, t)
    t.hideturtle()
    screen.exitonclick()

main()

5. 爱心烟花 (使用turtle图形)

import turtle
import random
import math

def draw_heart(x, y, size, color):
    turtle.penup()
    turtle.goto(x, y)
    turtle.pendown()
    turtle.color(color)
    turtle.begin_fill()
    turtle.left(140)
    turtle.forward(size)
    for _ in range(200):
        turtle.right(1)
        turtle.forward(size/100)
    turtle.left(120)
    for _ in range(200):
        turtle.right(1)
        turtle.forward(size/100)
    turtle.forward(size)
    turtle.end_fill()

def firework():
    colors = ['red', 'orange', 'yellow', 'green', 'blue', 'purple', 'pink']
    for _ in range(8):
        x = random.randint(-300, 300)
        y = random.randint(-300, 300)
        size = random.randint(20, 50)
        color = random.choice(colors)
        draw_heart(x, y, size, color)
        turtle.update()
        turtle.ontimer(lambda: draw_heart(x, y, size, 'black'), 1000)

def main():
    turtle.setup(800, 800)
    turtle.bgcolor('black')
    turtle.title("爱心烟花")
    turtle.tracer(0)
    turtle.hideturtle()
    
    for _ in range(5):
        firework()
        turtle.ontimer(firework, 2000)
    
    turtle.mainloop()

main()

这些代码展示了不同风格的爱心实现,包括3D效果、粒子系统、ASCII艺术、分形和动画效果。要运行这些代码,你需要安装相应的库(如matplotlib、pygame、colorama等)。每个示例都可以进一步自定义和扩展,创造出更独特的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值