Python代码/画布画爱心/动态爱心


import random
from math import sin, cos, pi, log
from tkinter import *

CANVAS_WIDTH = 1920  # 画布的宽
CANVAS_HEIGHT = 1080  # 画布的高
CANVAS_CENTER_X = CANVAS_WIDTH / 2  # 画布中心的X轴坐标
CANVAS_CENTER_Y = CANVAS_HEIGHT / 2  # 画布中心的Y轴坐标
IMAGE_ENLARGE = 11  # 放大比例
HEART_COLOR = "#ffb6c1"  


def heart_function(t, shrink_ratio: float = IMAGE_ENLARGE):
    """
    “爱心函数生成器”
    :param shrink_ratio: 放大比例
    :param t: 参数
    :return: 坐标
    """
    # 基础函数
    x = 16 * (sin(t) ** 3)
    y = -(13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t))

    # 放大
    x *= shrink_ratio
    y *= shrink_ratio

    # 移到画布中央
    x += CANVAS_CENTER_X
    y += CANVAS_CENTER_Y

    return int(x), int(y)


def scatter_inside(x, y, beta=0.15):
    """
    随机内部扩散
    :param x: 原x
    :param y: 原y
    :param beta: 强度
    :return: 新坐标
    """
    ratio_x = -beta * log(random.random())
    ratio_y = -beta * log(random.random())

    dx = ratio_x * (x - CANVAS_CENTER_X)
    dy = ratio_y * (y - CANVAS_CENTER_Y)

    return x - dx, y - dy


def shrink(x, y, ratio):
    """
    抖动
    :param x: 原x
    :param y: 原y
    :param ratio: 比例
    :return: 新坐标
    """
    force = -1 / (
        ((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.6
    )  # 这个参数...
    dx = ratio * force * (x - CANVAS_CENTER_X)
    dy = ratio * force * (y - CANVAS_CENTER_Y)
    return x - dx, y - dy


def curve(p):
    """
    自定义曲线函数,调整跳动周期
    :param p: 参数
    :return: 正弦
    """
    # 可以尝试换其他的动态函数,达到更有力量的效果(贝塞尔?)
    return 2 * (2 * sin(4 * p)) / (2 * pi)


class Heart:
    """
    爱心类
    """

    def __init__(self, generate_frame=20):
        self._points = set()  # 原始爱心坐标集合
        self._edge_diffusion_points = set()  # 边缘扩散效果点坐标集合
        self._center_diffusion_points = set()  # 中心扩散效果点坐标集合
        self.all_points = {}  # 每帧动态点坐标
        self.build(2000)

        self.random_halo = 1000

        self.generate_frame = generate_frame
        for frame in range(generate_frame):
            self.calc(frame)

    def build(self, number):
        # 爱心
        for _ in range(number):
            t = random.uniform(0, 2 * pi)  # 随机不到的地方造成爱心有缺口
            x, y = heart_function(t)
            self._points.add((x, y))

        # 爱心内扩散
        for _x, _y in list(self._points):
            for _ in range(3):
                x, y = scatter_inside(_x, _y, 0.05)
                self._edge_diffusion_points.add((x, y))

        # 爱心内再次扩散
        point_list = list(self._points)
        for _ in range(4000):
            x, y = random.choice(point_list)
            x, y = scatter_inside(x, y, 0.17)
            self._center_diffusion_points.add((x, y))

    @staticmethod
    def calc_position(x, y, ratio):
        # 调整缩放比例
        force = 1 / (
            ((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.520
        )  # 魔法参数

        dx = ratio * force * (x - CANVAS_CENTER_X) + random.randint(-1, 1)
        dy = ratio * force * (y - CANVAS_CENTER_Y) + random.randint(-1, 1)

        return x - dx, y - dy

    def calc(self, generate_frame):
        ratio = 10 * curve(generate_frame / 10 * pi)  # 圆滑的周期的缩放比例

        halo_radius = int(4 + 6 * (1 + curve(generate_frame / 10 * pi)))
        halo_number = int(3000 + 4000 * abs(curve(generate_frame / 10 * pi) ** 2))

        all_points = []

        # 光环
        heart_halo_point = set()  # 光环的点坐标集合
        for _ in range(halo_number):
            t = random.uniform(0, 2 * pi)  # 随机不到的地方造成爱心有缺口
            x, y = heart_function(t, shrink_ratio=11.6)  # 魔法参数
            x, y = shrink(x, y, halo_radius)
            if (x, y) not in heart_halo_point:
                # 处理新的点
                heart_halo_point.add((x, y))
                x += random.randint(-14, 14)
                y += random.randint(-14, 14)
                size = random.choice((1, 2, 2))
                all_points.append((x, y, size))

        # 轮廓
        for x, y in self._points:
            x, y = self.calc_position(x, y, ratio)
            size = random.randint(1, 3)
            all_points.append((x, y, size))

        # 内容
        for x, y in self._edge_diffusion_points:
            x, y = self.calc_position(x, y, ratio)
            size = random.randint(1, 2)
            all_points.append((x, y, size))

        for x, y in self._center_diffusion_points:
            x, y = self.calc_position(x, y, ratio)
            size = random.randint(1, 2)
            all_points.append((x, y, size))

        self.all_points[generate_frame] = all_points

    def render(self, render_canvas, render_frame):
        for x, y, size in self.all_points[render_frame % self.generate_frame]:
            render_canvas.create_rectangle(
                x, y, x + size, y + size, width=0, fill=HEART_COLOR
            )


def draw(main: Tk, render_canvas: Canvas, render_heart: Heart, render_frame=0):
    render_canvas.delete("all")
    render_heart.render(render_canvas, render_frame)
    main.after(160, draw, main, render_canvas, render_heart, render_frame + 1)


if __name__ == "__main__":
    root = Tk()  # 一个Tk
    canvas = Canvas(root, bg="black", height=CANVAS_HEIGHT, width=CANVAS_WIDTH)
    canvas.pack()
    heart = Heart()  # 心
    draw(root, canvas, heart)  # 开始画画~
    root.mainloop()

 

Jay0401
关注 关注
  • 24
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
python爱心代码简单教程
计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。
11-16 2万+
python爱心代码简单教程操作方法:1 将以上代码保存为.py文件,假设保存的文件名为 love.py (不会保存?先保存为txt文本,然后将后缀改为.py) 2 在终端(cmd命令窗口)输入python 空格 love.py的路径 回车 (如果是python3就这样写 python3 love.py路径,py文件的路径:直接将文件拖进来命令窗口就是路径) 3 根据提示 输入要展示的内容(如果输入中文要用英文引号引起来) **注意**: 01 如果要换行加上\n,比如Lily 后面换行,就这样写lily
Python动态满屏心形代码(turtle)
02-14
# Python使用turtle库绘制动态满屏爱心 1. 用笔的三个形状组合出一颗爱心; 2. 将爱心封装成类; 3. 定义爱心的移动和移动到某点的函数; 4. 定义爱心的移动速度和颜色与大小相关; 5. 实现有层次感的满屏动态爱心特效。
Python炫酷爱心代码
11-08
python爱心代码高级
一篇文章教会你如何用Python制作爱心代码(跳动版)
最新发布
Python_HUHU的博客
08-06 1474
Hello大家好,今天来给大家分享一波用Python制作的表白代码——Python爱心代码,接下来会给大家详细讲解,代码实现的详细步骤,以及代码运行所需要的环境。
基于python爱心代码高级.doc
07-14
python爱心代码高级 基于python爱心代码高级.doc 基于python爱心代码高级.doc 基于python爱心代码高级.doc 基于python爱心代码高级.doc 基于python爱心代码高级.doc 基于python爱心代码高级.doc 基于python爱心代码高级.doc 基于python爱心代码高级.doc
python代码利用turtle库生成爱心代码
05-11
python爱心代码高级 python代码利用turtle库生成爱心代码 python代码利用turtle库生成爱心代码 python代码利用turtle库生成爱心代码
Python李峋同款跳动的爱心代码(可写字版)
xxue345678的博客
12-07 3620
一年前小编曾用python编写过跳动的爱心代码,不知道有多少小伙伴们已经学会了呢,最近小编在用c语言和java编写跳动的爱心的时候,发现之前用python编写跳动的爱心时没有添加文字,这不,小编立马翻出之前的代码一顿操作,给大家带来了更新后的爱心,快来看看趴~(附详细分析哦)
李峋爱心代码
weixin_49796643的博客
11-08 9万+
李峋爱心代码
python】点燃我,温暖你 ,快来Get同款爱心代码
Python单行客的博客
11-11 1万+
python】点燃我,温暖你 ,快来Get同款爱心代码
python实现 跳动爱心代码 ,表白神器又+1+1+1......
m0_67575344的博客
11-09 1万+
关于表白神器什么的,我是豪不吝啬给的,别说小熊猫我没发嗷~
[Python]《点燃我,温暖你》李峋同款爱心代码
ZXW_NUDT的博客
11-16 1万+
《点燃我,温暖你》李峋同款爱心代码。 注意:代码原作者是【抖音:无所不能的法学生小黑】
python动态爱心代码
09-24
爱心代码python动态爱心代码 CANVAS_WIDTH = 640 # 画布的宽 CANVAS_HEIGHT = 480 # 画布的高 CANVAS_CENTER_X = CANVAS_WIDTH / 2 # 画布中心的X轴坐标 CANVAS_CENTER_Y = CANVAS_HEIGHT / 2 # 画布中心的Y轴坐标 ...
python一个动态爱心
weixin_35756130的博客
12-23 737
可以使用 Python 的第三方库 matplotlib 和 numpy 来动态爱心。 首先,需要安装这两个库: pipinstall matplotlib pip install numpy 然后,可以使用以下代码动态爱心: import numpy as np import matplotlib.pyplot as plt # 定义爱心的横坐标和纵坐标 t = np.linspa...
python爱心代码-怎么用python实现爱心
weixin_37988176的博客
11-01 1万+
Python中可以使用turtle库来图,通过控制笔运动来实现在画布图案。使用Python爱心代码如下:#!/usr/bin/env python# -*- coding:utf-8 -*-import turtleimport time# 心形圆弧def hart_arc():for i in range(200):turtle.right(1)turtle.forward(2)de...
Python教程:程序员6款,简易版的爱心表白代码合集
lyy2017175913的博客
04-17 1万+
请输入表白语句,然后回车,(例如"I Love You"):I Love You请输入要表白的人(例如"刘亦菲"):刘亦菲。
python动态爱心代码_教你用python动态爱心表白
weixin_39834205的博客
11-20 1万+
原标题:教你用python动态爱心表白 初级心学Python,感觉你们的都好复杂,那我来个简单的,我是直接把心形看作是一个正方形+两个半圆:于是这就很简单了,十行代码解决: import turtle as tt.pensize(2)# 笔大小2像素t.pencolor("red")# 颜色为红色t.left(45)# 45度t.fd(200)# 向前200直线t.circle(100, 18...
python简单的代码爱心,用python爱心怎么运行
2401_84668459的博客
05-11 748
这篇文章主要介绍了python简单的代码爱心,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。python爱心
利用python爱心
算法与编程之美
01-06 158
1 问题如何用python程序简单的平面图形,例如爱心。2 方法利用python中的import语句导入turtle库,输入笔控制命令,运动命令和方向设置命令,学习图形绘制函数的使用。代码清单 1import turtle #导入turtle库turtle.pensize(4)#设置笔像素为4像素turtle.pencolor("red")#设置笔颜色为红色turtle.fillcolor...
爱心代码python
热门推荐
新手小白
10-08 11万+
爱心代码 抖音来的看这里
python爱心代码动态
09-13
要在Python中实现爱心动态效果,可以使用Tkinter库来创建图形界面,并结合random库来产生随机数。首先,导入所需的库: import tkinter as tk import random 接下来,创建一个Tkinter窗口,并设置窗口的大小和标题: window = tk.Tk() window.geometry("400x400") window.title("动态爱心") 然后,创建一个Canvas画布,用于绘制图形: canvas = tk.Canvas(window, width=400, height=400) canvas.pack() 接着,我们定义一个函数draw_heart()来绘制一个爱心图形。通过调整贝塞尔曲线的控制点坐标,可以绘制出不同形状的爱心: def draw_heart(x, y, size): canvas.create_arc(x, y, x+size, y+size, start=200, extent=140, style='arc', width=3) canvas.create_arc(x+size, y, x+2*size, y+size, start=200, extent=140, style='arc', width=3) canvas.create_line(x+size, y+2*size, x+size, y+size/2, width=3) canvas.create_line(x, y+size/2, x+2*size, y+size/2, width=3) 接着,我们可以使用一个循环来不断地更新爱心的位置和大小,从而实现动态效果。在每次循环中,先清空画布,然后生成随机的位置和大小,调用draw_heart()函数来绘制爱心: while True: canvas.delete("all") # 清空画布 x = random.randint(0, 300) # 生成随机的x坐标 y = random.randint(0, 300) # 生成随机的y坐标 size = random.randint(50, 100) # 生成随机的大小 draw_heart(x, y, size) # 绘制爱心 window.update() # 更新窗口 最后,调用Tkinter的mainloop()方法来启动窗口的事件循环,使程序保持运行状态: window.mainloop() 通过以上代码,我们可以实现一个在窗口中不断绘制随机位置和大小的爱心,从而实现动态效果。你可以根据自己的需求调整爱心的形状、颜色和动效果。希望对你有帮助!
写文章

热门文章

  • Python代码/画布画爱心/动态爱心 22191
  • Python爱心代码/画布/仿李峋 4202
  • 操作系统 实验二: 循环轮转调度算法 1027
  • 操作系统 实验三: 存储管理 951
  • PTA 有向图深度优先搜索时间戳DFS算法 704

最新评论

  • 操作系统 实验二:进程调度 高优先权优先算法

    CSDN-Ada助手: 非常感谢用户分享的博客,恭喜您成功完成了操作系统实验二!高优先权优先算法是进程调度中的重要算法之一,您的分享对我们这些初学者来说非常有帮助。 在此基础上,建议用户可以继续深入探究进程调度中其他的算法,例如时间片轮转算法、最短作业优先算法等等。期待您的下一篇博客! CSDN 会根据你创作的前四篇博客的质量,给予优秀的博主博客红包奖励。请关注 https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply4 看奖励名单。

  • Python代码/画布画爱心/动态爱心

    Chaiaia: 为什么运行不出来啊

  • Python爱心代码/画布/仿李峋

    nfdgh: 如何在动画中加名字和日期

  • Python代码/画布画爱心/动态爱心

    m0_75235787: 请问大佬们,我代码应该没错,但是运行不出来该咋办呢

  • Python代码/画布画爱心/动态爱心

    m0_75197786: 请问颜色在哪里改呀

最新文章

  • 操作系统 实验三: 存储管理
  • 操作系统 实验二: 循环轮转调度算法
  • 操作系统 实验二:进程调度 高优先权优先算法
2023年3篇
2022年3篇

目录

目录

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家仿真玻璃钢雕塑价格房山区道路护栏玻璃钢花盆天水玻璃钢头像雕塑重庆玻璃钢雕塑工程公司清远商场美陈雕塑镜面不锈钢玻璃钢卡通雕塑公司辽阳动物玻璃钢雕塑生产厂家卫东玻璃钢雕塑定制天津玻璃钢雕塑方案常熟商场亮化美陈济南玻璃钢花盆设计临沂玻璃钢气球雕塑河南景区玻璃钢雕塑销售厂家马鞍山动物玻璃钢雕塑定做盘龙区玻璃钢雕塑批发厂家上海艺术商场美陈厂家直销公园玻璃钢雕塑报价镇江玻璃钢雕塑设计价位湖北佛像玻璃钢雕塑图片常州卡通玻璃钢雕塑杭州玻璃钢雕塑摆件设计企业青浦区镜面玻璃钢雕塑价格铜陵商场活动美陈湖北环保玻璃钢雕塑多少钱北京艺术商场美陈从化人物玻璃钢雕塑图片党建文化玻璃钢雕塑需要几天电镀玻璃钢雕塑定制湛江玻璃钢彩绘大象雕塑佛山玻璃钢人物雕塑公司香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化