Python制作爱心跳动代码,这就是程序员的烂漫吗

前言

最近有个剧挺火的 就是那个程序员的剧,叫什么温暖你来着

c语言

咳咳,剧我没怎么看,但是吧,里面有个爱心代码,最近可是蛮火的,今天就用Python来尝试一下吧

JavaEE

怎么说呢,用这个表白也可以的,万一她也看这个剧呢,万一就成了呢 哈哈

app

冲啊,兄弟们

systemverilog

请添加图片描述

训练

okok 话不多说,现在开始代码部分

node.js

代码

模块导入

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

源码.点击领取即可

Java 定时任务

画布的高和宽

有些数值咱自己也是可以调改的哈,这里我设置的高和宽是 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群:770699889 ### 源码领取
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)

请添加图片描述

cout

随机内部扩散

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群:770699889 ### 源码领取
    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群:770699889 ### 源码领取

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

完整代码

源码.点击领取即可

匿名内部类

在这里插入图片描述

chrome devtools

最后

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

MyBatisPlus

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

脚本

就看你们怎么操作咯

mint

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

CA

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

GIS

请添加图片描述

npm报错

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注