吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 232|回复: 2
收起左侧

[Python 原创] math-heart-graph使用python实现心形函数

[复制链接]
矢岛舞美 发表于 2024-11-14 12:41
本帖最后由 矢岛舞美 于 2024-11-14 13:20 编辑


[Python] 纯文本查看 复制代码
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import tkinter as tk

# 定义绘图函数
def plot_function(h):
    x = np.linspace(-3, 3, 400)
    with np.errstate(invalid='ignore'):
        # 使用绝对值确保对称性
        y = np.empty_like(x)
        for i, xi in enumerate(x):
            if 3.3 - xi ** 2 >= 0:
                y[i] = np.abs(xi) ** (2 / 3) + 0.9 * np.sqrt(3.3 - xi ** 2) * np.sin(h * np.pi * xi)
            else:
                y[i] = np.nan

    ax.clear()
    ax.plot(x, y, color='red')

    # 设置四个象限的坐标轴
    ax.spines['left'].set_position('center')
    ax.spines['bottom'].set_position('center')
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')

    # 设置相同的单位长度
    ax.set_aspect('equal', 'box')

    # 设置坐标轴范围和刻度
    ax.set_xlim(-3, 3)
    ax.set_ylim(-3, 3)
    ax.set_xticks([])
    ax.set_yticks([])

    # 在坐标轴末端添加 x 和 y 标签
    ax.annotate('x', xy=(3, 0), xytext=(5, 0),
                textcoords='offset points', ha='right', va='center')
    ax.annotate('y', xy=(0, 3), xytext=(0, 5),
                textcoords='offset points', ha='center', va='bottom')

    ax.grid(True, linestyle='--', color='gray', alpha=0.7)
    canvas.draw()

# 更新图形
def update_plot():
    try:
        h_value = float(entry.get())
        plot_function(h_value)
    except ValueError:
        print("请输入一个有效的数字")

# 创建 Tkinter 窗口
root = tk.Tk()
root.title("输入 h 的值")

# 创建 Matplotlib 图形
fig, ax = plt.subplots(figsize=(6, 6))
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().pack()

# 初始绘图
plot_function(1.0)

# 创建输入框和按钮
entry = tk.Entry(root)
entry.pack()
entry.insert(0, "1.0")

button = tk.Button(root, text="确定", command=update_plot)
button.pack()

# 运行 Tkinter 主循环
root.mainloop()

修改版本,增加动态绘制过程
[Python] 纯文本查看 复制代码
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.animation import FuncAnimation
import tkinter as tk

# 定义绘图函数
def plot_function(h):
    x = np.linspace(-3, 3, 400)
    with np.errstate(invalid='ignore'):
        y = np.empty_like(x)
        for i, xi in enumerate(x):
            if 3.3 - xi ** 2 >= 0:
                y[i] = np.abs(xi) ** (2 / 3) + 0.9 * np.sqrt(3.3 - xi ** 2) * np.sin(h * np.pi * xi)
            else:
                y[i] = np.nan
    return x, y

# 更新函数
def update(frame):
    h_value = float(entry.get())
    x, y = plot_function(h_value * frame / 100)
    ax.clear()
    ax.plot(x, y, color='red')

    ax.spines['left'].set_position('center')
    ax.spines['bottom'].set_position('center')
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')

    ax.set_aspect('equal', 'box')
    ax.set_xlim(-3, 3)
    ax.set_ylim(-3, 3)
    ax.set_xticks([])
    ax.set_yticks([])

    ax.annotate('x', xy=(3, 0), xytext=(5, 0),
                textcoords='offset points', ha='right', va='center')
    ax.annotate('y', xy=(0, 3), xytext=(0, 5),
                textcoords='offset points', ha='center', va='bottom')

    ax.grid(True, linestyle='--', color='gray', alpha=0.7)

    # 更新公式显示
    formula = (r"$y = x^{\frac{2}{3}} + 0.9 \cdot (3.3 - x^2)^{\frac{1}{2}} \cdot "
               r"\sin(h \pi x)$")
    ax.text(0.5, 1.05, formula, transform=ax.transAxes, fontsize=12, ha='center', va='bottom')

    canvas.draw()

# 创建 Tkinter 窗口
root = tk.Tk()
root.title("输入 h 的值")

# 创建 Matplotlib 图形
fig, ax = plt.subplots(figsize=(6, 6))
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().pack()

# 创建输入框和按钮
entry = tk.Entry(root)
entry.pack()
entry.insert(0, "1.0")

# 创建动画
ani = FuncAnimation(fig, update, frames=100, interval=50, repeat=True)

# 运行 Tkinter 主循环
root.mainloop()


免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
ruanxiaoqi + 1 + 1 我很赞同!
xiong9411 + 1 + 1

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xixicoco 发表于 2024-11-14 13:05
可以给女生用
derick 发表于 2024-11-14 14:25
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 12:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表