程序员的浪费,Python一对一还原《点燃我,温暖你》里面比较火的那个爱心代码 | 附源码

news2025/1/11 16:41:26

前言

包子们,上午好
最近有个剧挺火的 就是那个程序员的剧,叫《点燃我,温暖你》
最近听说很火呀,那作为程序员,Python中的战斗机的小编,能不给大家安排一波!
怎么说呢,用这个表白也可以的,万一她也看这个剧呢,万一就成了呢 哈哈
冲啊,兄弟们

相关文件

关注小编,私信小编领取哟!
当然别忘了一件三连哟~~
公众号:Python日志

源码点击蓝色字体领取
Python零基础入门到精通视频合集

【整整800集】Python爬虫项目零基础入门合集,细狗都学会了,你还不会?

效果展示

在这里插入图片描述

代码

模块导入

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

画布的高和宽

有些数值咱自己也是可以调改的哈,这里我设置的高和宽是 480:640

CANVAS_WIDTH = 640  # 画布的宽
CANVAS_HEIGHT = 480  # 画布的高

x,y轴坐标

CANVAS_CENTER_X = CANVAS_WIDTH / 2  # 画布中心的X轴坐标
CANVAS_CENTER_Y = CANVAS_HEIGHT / 2  # 画布中心的Y轴坐标

放大比例

IMAGE_ENLARGE = 11  # 放大比例

心的颜色

这个自己看着改啊,想改啥色就改啥色

HEART_COLOR = "#ff8181"  # 心的颜色,芜湖我喜欢的粉色

函数生成器

python学习交流Q群:494958217### 源码领取
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)
python学习交流Q群:494958217### 源码领取
    return x - dx, y - dy


抖动

这一步可关键了,咱做的就是跳动的爱心代码,so这一步重中之重


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


调整缩放比例

基本上都可以自己调改到自己喜欢的样子

@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

圆滑的周期缩放比例

python学习交流Q群:770699889 ### 源码领取
    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 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)
python学习交流Q群:494958217### 源码领取

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()


完整代码

点击领取

在这里插入图片描述

最后

其实咱自己也可以动动脑筋,调整一下画布的大小啥的,然后再加些其他的元素上去

就比如名字,还有什么日期…很多很多

就看你们怎么操作咯

好啦,今天的分享到这里就结束了

对文章有问题的,或者有其他关于python的问题,可以在评论区留言或者私信我哦
觉得我分享的文章不错的话,可以关注一下我,或者给文章点赞(/≧▽≦)/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/76479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我凭借这 1000 道 java 真题,顺利拿下京东、饿了么、阿里大厂 offer

今天这篇文章也算是一次面试总结了吧! 毕竟金九银十过去了,总得给大家来点东西交代交代! 所以今天,这篇文章就应运而生了,给大家来点正正经经的干货教学,让大家体验一下干货的魅力! 小编今天这里…

【C语言数据结构(基础篇)】第一站:时间复杂度与空间复杂度

目录 一、什么是时间复杂度和空间复杂度 1.算法效率 2.时间复杂度的概念 3.空间复杂度的概念 二、如何计算常见的时间复杂度 1.大O的渐进表示法 2.一些时间复杂度的例子 (1)例1 (2)例2 (3)例3 (4)例4 (5&a…

【计算机视觉+自动驾驶】二、多任务深度学习网络并联式、级联式构建详细讲解(图像解释 超详细必看)

觉得有帮助麻烦点赞关注收藏~~~ 一、多任务网络的主要分类 目前建立的多任务网络可以分为两种方法,一种为并联多任务网络结构,另一种为级联多任务网络结构,两种网络构建方式分别如下图所示 并联式 级联式 并联网络结构大多为共享基础网络而…

ADI Blackfin DSP处理器-BF533的开发详解14:LED跑马灯(含源代码)

接口讲完了,下面写点应用程序,GPIO最典型的应用,LED跑马灯。 硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 *硬件实现原理 ADSP-EDU-BF533开发板上共设计了…

2005-2020年全国31省劳动力市场分割指数

2005-2020年全国31省劳动力市场分割指数 1、时间:2005-2020年 2、范围:包括全国31省, 3、数据内容:数据存在缺失,下载链接界面有数据预览,具体缺失情况参看链接内数据预览, 内含原始数据、A…

把废旧监控改无人机遥控车红外远程摄像头

像我们这些精打细算的业余玩家,淘个新宝贝都要掂量掂量。很羡慕能买到专用红外摄像头配无人机。可是手头不宽裕,只有一些旧零件。这都是废物再利用,所以说不要太追求性能了,自然让他工作就好,测试这条路线的可行性。 …

blneder 蜡笔

文章目录简介.打开蜡笔.基本操作.自由线.图形工具.图层.遮罩.画布.画布原点.![在这里插入图片描述](https://img-blog.csdnimg.cn/46cb7019e8ff41e6b391e056c616ce32.png)画布旋转.辅助.圆形.径向.平行.栅格.等距.编辑模式.顶部工具栏.选择.曲线编辑.左侧工具栏.快捷键.画笔深度…

值得一看的Linux内核—中断下半部之软中断

软中断 软中断(softirq)是中断处理程序在开启中断的情况下执行的部分,可以被硬中断抢占。 内核定义了一张软中断向量表,每种软中断有一个唯一的编号,对应一个softirq_action实例,softirq_action实例的成员…

b站黑马JavaScript的Node.js案例代码——考试成绩整理案例

目录 目标效果: 重点原理: 1.js中split方法——转换字符串为数组 2.js中forEach方法——遍历数组中每个对象 3.js数组操作中push方法——添加1/多个元素去数组的末尾 4.js数组操作中replace方法——在字符串中用一些字符替换另一些字符 5.js数组操…

ATtiny13与Proteus仿真-8位通用定时器/计数器与PWM仿真

8位通用定时器/计数器与PWM 1、8位通用定时器介绍 ATtiny13的8位通用定时器/计数器有两个独立的输出比较单元,并支持PWM。这意味着,可以通过8位通用定时器/计数器生产PWM信号。关于PWM的介绍,在这里就展开介绍,请参考相关资料。 ATtiny13的8位通用定时器/计数器具有如下…

备战一年,终于斩获腾讯T3,老子一定有美好的未来...

我就是那个从25岁躺平,30岁开始醒悟的“中年秃头大叔”,这人一到了中年,思考问题的方向确实不一样了。以前我不想结婚不想养育后代,天天公司摸鱼,总觉得自己赚钱自己花就挺好,25岁赚一万,30岁还…

[ 数据结构 ] 排序算法--------七大内排,看完还不会写来揍我

0 前言 1.1 排序分类 内部排序和外部排序,前者数据加载到内存,后者数据量大需借助外部文件. 内部排序包含: 插入排序:直接插入排序,希尔排序 选择排序:简单选择排序,堆排序 交换排序:冒泡排序,快速排序 归并排序 基数排序 1.2 复杂度 1)度量一个程序时间有两种方法,事后统…

tp3.2实现websocket

首先从单服务器实现开始 我的系统是centos系统,lnmp搭建的环境,php5.6 1:首先检查环境是否支持 curl -Ss http://www.workerman.net/check.php | php PHP Version > 5.3.3 [OK] Extension pcntl check [OK] Extension posix check [OK] 2.…

Metal每日分享,均值模糊滤镜效果

本案例的目的是理解如何用Metal实现均值模糊效果滤镜,均值模糊原理其实很简单通过多个纹理叠加,每个纹理偏移量设置不同达到一点重影效果来实现模糊; Demo HarbethDemo地址 实操代码 // 均值模糊效果滤镜 let filter C7MeanBlur.init(radius: 0.5)//…

清除浏览器缓存

清除浏览器的缓存知识调用前言引入具体操作知识调用 文章中可能用到的知识点前端学习:浏览器缓存方式有哪些(http协议 websql indexDB cookie localstorage sessionstorage)如何查看Chrome浏览器的页面缓存内容【详细教程】 前言引入 上期文…

基于汇编的.NET高级调试

一:背景 1. 简介 .NET 高级调试要想玩的好,看懂汇编是基本功,但看懂汇编和能写点汇编又完全是两回事,所以有时候看的多,总手痒痒想写一点,在 Windows 平台上搭建汇编环境不是那么容易,大多还是用微软的 MASM + DosBox 搭一个 8086 的环境,这玩意距今快 50 年了。 在…

Node.js Event Loop 处理的几大周期介绍

Node.js Event Loop 处理的几大周期如下图所示: Timer:通过 setTimeout() 或 setInterval() 安排的一切都将在这里处理。 IO 回调:这里将处理大部分回调。 由于 Node.js 中的所有用户态代码基本上都在回调中(例如,对传…

深入理解机器学习——概率图模型(Probabilistic Graphical Model):马尔可夫随机场(Markov Random Field,MRF)

分类目录:《深入理解机器学习》总目录 马尔可夫随机场(Markov Random Field,MRF)是典型的马尔可夫网,这是一种著名的无向图模型,图中每个结点表示一个或一组变量,结点之间的边表示两个变量之间的…

Zookeper报错:Will not attempt to authenticate using SASL (unknown error)|防火墙的问题

先放一张debug成功的图吧~ 之前一直报这个错,不知道为什么,非常迷惑,然后试了多方法,就是防火墙的问题。我是Hadoop2.5和centos6,因此没法用systemtcl,就使用serive命令。 方式一:Linux命令来…

Kubernetes单主集群的部署(一)

目录 一、k8s单主架构集群的部署 1.操作系统初始化配置 2.部署 etcd 集群 3.部署docker引擎 4.部署 Master 组件 5.部署 Worker Node 组件 6.部署网络组件(使用 flannel) 一、k8s单主架构集群的部署 k8s集群master01:192.168.116.1…