Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >李峋同款爱心代码

李峋同款爱心代码

作者头像
时间静止不是简史
发布于 2022-11-21 07:36:56
发布于 2022-11-21 07:36:56
1.3K02
代码可运行
举报
文章被收录于专栏:Java探索之路Java探索之路
运行总次数:2
代码可运行

李峋爱心代码

背景

最近大火的电视剧《点燃我温暖你》出现,令我的家庭地位进一步下降,因为男主“李峋”已经变成了她的大老公,而我就被打入冷宫. 为了满足她的“攀比心”,我连夜给她实现了粉红色爱心的跳动,让她看到满满的爱意.

本文特意将两种代码都进行分享, 为了能够让大家体会到两种代码实现的效果, 特意放出下面的效果图来帮助大家对比

  • 效果1
  • 效果2

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import random
from math import sin, cos, pi, log
from tkinter import *

CANVAS_WIDTH = 840  # 画布的宽
CANVAS_HEIGHT = 680  # 画布的高
CANVAS_CENTER_X = CANVAS_WIDTH / 2  # 画布中心的X轴坐标
CANVAS_CENTER_Y = CANVAS_HEIGHT / 2  # 画布中心的Y轴坐标
IMAGE_ENLARGE = 11  # 放大比例

HEART_COLOR = "RED"  # 引号内修改颜色!


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

    # 放大
    # x *= shrink_ratio
    # y *= shrink_ratio
    x *= IMAGE_ENLARGE
    y *= IMAGE_ENLARGE
    # 移到画布中央
    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(10000):
            x, y = random.choice(point_list)
            x, y = scatter_inside(x, y, 0.27)
            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.420)  # 魔法参数

        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 = 15 * 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=-15)  # 魔法参数
            x, y = shrink(x, y, halo_radius)
            if (x, y) not in heart_halo_point:
                # 处理新的点
                heart_halo_point.add((x, y))
                x += random.randint(-60, 60)
                y += random.randint(-60, 60)
                size = random.choice((1, 1, 2))
                all_points.append((x, y, size))
                all_points.append((x + 20, y + 20, size))
                all_points.append((x - 20, y - 20, size))
                all_points.append((x + 20, y - 20, size))
                all_points.append((x - 20, y + 20, 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(1, draw, main, render_canvas, render_heart, render_frame + 1)


if __name__ == '__main__':
    root = Tk()
    root.title("晚上星月争辉,美梦陪你入睡")
    canvas = Canvas(root, bg='black', height=CANVAS_HEIGHT, width=CANVAS_WIDTH)
    canvas.pack()
    heart = Heart()
    draw(root, canvas, heart)
    root.mainloop()

效果2地址(将冒号后地址复制后放入浏览器即可): docs.qq.com/doc/DUWJNYmx0TkVNY0VP

运行

运行代码(用pycharm打开改代码然后运行即可)

注意: 该代码为Python代码, 运行时需要安装 pycharm 或 IDLE 等开发环境工具. 下面介绍下pycharm基本安装和使用方法. 在最后我们还会介绍如何将代码打包成可以直接运行的exe程序. 无需pycharm即可运行

pycharm

PyCharm 出自 JetBrains 之手. 是一种 Python IDE,带有一整套可以帮助用户在使用 Python 语言开发时提高其效率的工具. 类似 IDEA, 作为 企业级软件, 用于快速开发 Python 程序, 之前使用过 IDEA 的非常推荐使用.

PyCharm破姐版下载地址(将冒号后地址复制后放入浏览器即可): docs.qq.com/doc/DUVpEeXh2dEtrQXhU

Pycharm 的优点

  • 方便的环境管理
  • 自动导入包
  • 方便的代码调试
  • Git 管理

Pycharm 的缺点

  • 刚开始打开,索引包较慢
  • 内存占用太高(3G 左右)

安装使用步骤

  1. 安装 直接运行 PyCharm.exe, 然后一直 next , 然后点击 install , 最后点击 Finish
  2. 新建项目
  1. 开发和运行项目 打开项目后,右键单击项目,new -> FIle , 创建 Python 文件 mypy01

点击 Run-> Run xxx 或者直接 Shift+ F10 运行即可

  1. 交互模式和控制台

控制台(Terminal )相当于直接进入了 Windows 的 shell 界面

交互模式相当于进入类似 IDLE 的交互模式:

  1. 项目创建后引用的包版本配置

打包成exe程序

在将上面代码运行无误之后, 我们总不能每次都用pycharm来打开这段代码吧. 所以我们可以利用pycharm打包代码的库 - pyinstaller.用于将代码打包成可以执行的.exe程序

步骤

  1. 安装pyinstall 在左上角工具栏找到 File->Setting, 然后按照下图配置
  1. 将代码打包成.exe程序 pyinstaller -F -w .\爱心代码文件名.py
  1. 打包成功后, 会在当前代码所在目录下, 创建 build和dist目录, 而打包好的程序就在 dis目录下
  1. 找到改代码所在目录, 双击运行即可
  1. 运行效果如图
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
李峋同款爱心代码!跳动的心,给你爱的人一个惊喜!
Hello 大家好!!!再过一周马上就快要到三八女神节了。一年中女神最重要的几个节日:生日、情人节、三八、七夕,安排好了,你这一年就轻松好过多了,如果忘记了,那就。。。。。。。
北京-宏哥
2024/02/29
3.1K0
李峋同款爱心代码!跳动的心,给你爱的人一个惊喜!
李峋同款爱心Python代码版来了
最近看到不少关于李峋同款爱心的视频、文章,今天我们也分享一下李峋同款爱心 Python 代码版。要问李峋是谁?我也不太清楚,大家可自行百度,这个是我百度的结果,仅供参考。
Python小二
2022/12/20
2.3K0
李峋同款爱心Python代码版来了
几个很有趣的python迷你程序
这个程序可以生成自己所定义的小二维码,里面可以是网页,可以是文字,自由选择,很好玩,具体大家自己搞哈~
柳神
2024/05/30
2310
用Python制作一个动态爱心效果!
大概率是AE这种做特效软件实现的,毕竟里面的编程语言、编辑器、程序出现太多问题啦。
小F
2023/01/03
5.6K0
用Python制作一个动态爱心效果!
李峋同款爱心Python代码版来了
init(self, generate_frame=20): 这是类的初始化方法,用于创建一个对象时进行一些初始设置。
老虎也淘气
2024/01/30
9.4K15
李峋同款爱心Python代码版来了
七夕最强Python表白代码来了
毫无疑问,玫瑰一直都是七夕、520......这类节日的专属,带文字的玫瑰花,文字可以根据节日自行更改。
Python小二
2023/09/11
2K0
七夕最强Python表白代码来了
Python制作动态爱心粒子特效
在计算机图形学中,粒子特效是一种通过大量小而简单的图像元素(粒子)来模拟大规模物理现象的技术。
小白的大数据之旅
2024/11/26
7610
Python制作动态爱心粒子特效
基于HTML5的爱心表白动画特效
从视觉上看,它也是一个爱心轮廓,但是不同的是这个爱心轮廓由许多跳动的小爱心组成,更加有一种3D立体的效果。
芯动大师
2022/11/20
2.9K0
【双十一特辑】爱心代码(程序员的浪漫)-李峋
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),字体色)
天寒雨落
2022/11/20
5.2K0
【双十一特辑】爱心代码(程序员的浪漫)-李峋
复制粘贴-实现动态爱心 网页版
上一篇的python爱心代码有很多读者反馈不会用。 本篇来一个小白版的,无需会代码,有浏览器就可以。 复制以下内容,保存为.html文件,双击打开即可出现动态爱心 <!DOCTYPE html> <html> <head> <title></title> <script src="js/jquery.min.js"></script> </head> <style> * { padding: 0; margin: 0; }
小黑同学
2022/11/16
2.3K0
复制粘贴-实现动态爱心 网页版
【愚公系列】2022年01月 Django商城项目07-注册界面-图片验证码
文章目录 一、图形验证码 1.依赖包安装 2.图形验证码封装 二、后端使用 备注:`具体的前端请求图片上篇已经给出` 一、图形验证码 1.依赖包安装 pip install pillow 2.图形验证码封装 import random import string import os.path from io import BytesIO from PIL import Image from PIL import ImageFilter from PIL.ImageDraw import Draw fro
愚公搬代码
2022/01/14
2380
星辰秘典:揭示Python项目的宇宙奥秘——宇宙星空模拟器(改)
宇宙星空模拟器是一个用Python和Pygame库创建的小型项目,它可以模拟宇宙中的星星、星系和星云,并展现出美丽的星空效果。通过这个模拟器,你可以欣赏到宇宙中的无尽星辰,感受宇宙的浩瀚和神秘。
命运之光
2024/03/20
2400
星辰秘典:揭示Python项目的宇宙奥秘——宇宙星空模拟器(改)
Django实践-05Cookie和Session
官网:https://www.djangoproject.com/ 博客:https://www.liujiangblog.com/ 本博客内容参考git
IT从业者张某某
2023/10/16
2370
Django实践-05Cookie和Session
Python 小型项目大全 16~20
自己创建这个程序的一个有用的方法是首先在你的编辑器中“画”几个大小的钻石,然后随着钻石变大,找出它们遵循的模式。这项技术将帮助您认识到菱形轮廓的每一行都有四个部分:前导空格数、外部正斜杠、内部空格数和外部反斜杠。实心钻石有几个内部正斜线和反斜线,而不是内部空间。破解这个模式就是我写diamonds.py的方法。
ApacheCN_飞龙
2023/04/12
6430
利用python给女朋友放个烟花
python烟花代码 如下 # -*- coding: utf-8 -*- import math, random,time import threading import tkinter as tk import re #import uuid Fireworks=[] maxFireworks=8 height,width=600,600 class firework(object): def __init__(self,color,speed,width,height):
python亦希
2021/12/30
2.8K0
【算法】Graham 凸包扫描算法 ( 凸包概念 | 常用的凸包算法 | 角排序 | 叉积 | Python 代码示例 )
博客代码下载 : https://download.csdn.net/download/han1202012/89428182
韩曙亮
2024/06/14
6240
【算法】Graham 凸包扫描算法 ( 凸包概念 | 常用的凸包算法 | 角排序 | 叉积 | Python 代码示例 )
星辰秘典:探索Python项目的神秘力量——贪吃蛇
前言:你好,欢迎来到我的博客。我是一个热爱编程的人,特别喜欢用Python这门语言来创造一些有趣的图形项目。在这篇博客中,我将和你分享一些我用Python写的小的图形项目,包括它们的原理,代码和效果。我希望你能从中学到一些有用的知识,也能感受到编程的乐趣。如果你对我的项目有任何问题或建议,欢迎在评论区留言,我会尽快回复你。让我们开始吧!
命运之光
2024/03/20
1400
星辰秘典:探索Python项目的神秘力量——贪吃蛇
Python 烟花展示:使用 Pygame 创建绚丽的夜空
小白的大数据之旅
2024/11/20
2250
Python 烟花展示:使用 Pygame 创建绚丽的夜空
【Python全栈100天学习笔记】Day44 Web表单介绍及使用
我们继续来完成上一章节中的项目,实现“用户注册”和“用户登录”的功能,并限制只有登录的用户才能为老师投票。Django框架中提供了对表单的封装,而且提供了多种不同的使用方式。
天道Vax的时间宝藏
2022/04/02
9020
【Python全栈100天学习笔记】Day44 Web表单介绍及使用
用Python绘制动态爱心形状:实现浪漫动画效果
在编程世界中,艺术与代码的结合常常能创造出令人惊叹的作品。无论你是想为特别的日子制作一个浪漫的动画,还是单纯地想通过代码展示你的创造力,绘制一个动态的爱心形状都是一个绝佳的选择。本文将指导你使用Python和Matplotlib库一步步实现这个动效。
屿小夏
2024/09/25
2.4K0
推荐阅读
相关推荐
李峋同款爱心代码!跳动的心,给你爱的人一个惊喜!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验