import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
# สร้างฟังก์ชันหัวใจ
def heart(t, scale=1):
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)
return scale * x, scale * y
# ตั้งค่ากราฟ
fig, ax = plt.subplots(figsize=(6, 6))
ax.set_xlim(-20, 20)
ax.set_ylim(-20, 20)
ax.set_aspect('equal')
ax.axis('off')
# เตรียมข้อมูลเส้นหัวใจ
t = np.linspace(0, 2 * np.pi, 1000)
lines = []
num_layers = 10 # จำนวนชั้นของเส้นหัวใจ
colors = plt.cm.Reds(np.linspace(0.3, 1, num_layers)) # ไล่เฉดสีแดง
# สร้างเส้นหัวใจหลายชั้น
for i in range(num_layers):
line, = ax.plot([], [], lw=2, color=colors[i])
lines.append(line)
# ฟังก์ชันอัปเดตแอนิเมชัน
def update(frame):
for i, line in enumerate(lines):
scale = 1 + 0.1 * np.sin(2 * np.pi * (frame / 50 + i / num_layers)) # สร้างการสั่นแบบคลื่น
x, y = heart(t, scale)
line.set_data(x, y)
return lines
# สร้างแอนิเมชัน
ani = FuncAnimation(fig, update, frames=100, interval=50, blit=True)
# แสดงผล
plt.show()
aW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBtYXRwbG90bGliLmFuaW1hdGlvbiBpbXBvcnQgRnVuY0FuaW1hdGlvbgoKIyDguKrguKPguYnguLLguIfguJ/guLHguIfguIHguYzguIrguLHguJnguKvguLHguKfguYPguIgKZGVmIGhlYXJ0KHQsIHNjYWxlPTEpOgogICAgeCA9IDE2ICogbnAuc2luKHQpICoqIDMKICAgIHkgPSAxMyAqIG5wLmNvcyh0KSAtIDUgKiBucC5jb3MoMiAqIHQpIC0gMiAqIG5wLmNvcygzICogdCkgLSBucC5jb3MoNCAqIHQpCiAgICByZXR1cm4gc2NhbGUgKiB4LCBzY2FsZSAqIHkKCiMg4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiB4Lij4Liy4LifCmZpZywgYXggPSBwbHQuc3VicGxvdHMoZmlnc2l6ZT0oNiwgNikpCmF4LnNldF94bGltKC0yMCwgMjApCmF4LnNldF95bGltKC0yMCwgMjApCmF4LnNldF9hc3BlY3QoJ2VxdWFsJykKYXguYXhpcygnb2ZmJykKCiMg4LmA4LiV4Lij4Li14Lii4Lih4LiC4LmJ4Lit4Lih4Li54Lil4LmA4Liq4LmJ4LiZ4Lir4Lix4Lin4LmD4LiICnQgPSBucC5saW5zcGFjZSgwLCAyICogbnAucGksIDEwMDApCmxpbmVzID0gW10KbnVtX2xheWVycyA9IDEwICAjIOC4iOC4s+C4meC4p+C4meC4iuC4seC5ieC4meC4guC4reC4h+C5gOC4quC5ieC4meC4q+C4seC4p+C5g+C4iApjb2xvcnMgPSBwbHQuY20uUmVkcyhucC5saW5zcGFjZSgwLjMsIDEsIG51bV9sYXllcnMpKSAgIyDguYTguKXguYjguYDguInguJTguKrguLXguYHguJTguIcKCiMg4Liq4Lij4LmJ4Liy4LiH4LmA4Liq4LmJ4LiZ4Lir4Lix4Lin4LmD4LiI4Lir4Lil4Liy4Lii4LiK4Lix4LmJ4LiZCmZvciBpIGluIHJhbmdlKG51bV9sYXllcnMpOgogICAgbGluZSwgPSBheC5wbG90KFtdLCBbXSwgbHc9MiwgY29sb3I9Y29sb3JzW2ldKQogICAgbGluZXMuYXBwZW5kKGxpbmUpCgojIOC4n+C4seC4h+C4geC5jOC4iuC4seC4meC4reC4seC4m+C5gOC4lOC4leC5geC4reC4meC4tOC5gOC4oeC4iuC4seC4mQpkZWYgdXBkYXRlKGZyYW1lKToKICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShsaW5lcyk6CiAgICAgICAgc2NhbGUgPSAxICsgMC4xICogbnAuc2luKDIgKiBucC5waSAqIChmcmFtZSAvIDUwICsgaSAvIG51bV9sYXllcnMpKSAgIyDguKrguKPguYnguLLguIfguIHguLLguKPguKrguLHguYjguJnguYHguJrguJrguITguKXguLfguYjguJkKICAgICAgICB4LCB5ID0gaGVhcnQodCwgc2NhbGUpCiAgICAgICAgbGluZS5zZXRfZGF0YSh4LCB5KQogICAgcmV0dXJuIGxpbmVzCgojIOC4quC4o+C5ieC4suC4h+C5geC4reC4meC4tOC5gOC4oeC4iuC4seC4mQphbmkgPSBGdW5jQW5pbWF0aW9uKGZpZywgdXBkYXRlLCBmcmFtZXM9MTAwLCBpbnRlcnZhbD01MCwgYmxpdD1UcnVlKQoKIyDguYHguKrguJTguIfguJzguKUKcGx0LnNob3coKQ==