iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何用Python制作一个动态爱心效果
  • 658
分享到

如何用Python制作一个动态爱心效果

python开发语言 2023-10-05 10:10:17 658人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录 ① Python跳动爱心 ② Python爱心泡泡 ③ JavaScript 最近「点燃我,温暖你」这部剧非常火,讲述的是程序员的爱情故事。 其中陈飞宇饰演的男主李峋,在剧中用程序做出的爱心跳动效果,非常炫。 网上各个大佬也是纷

目录

① Python跳动爱心

② Python爱心泡泡

③ JavaScript


最近「点燃我,温暖你」这部剧非常火,讲述的是程序员的爱情故事。

其中陈飞宇饰演的男主李峋,在剧中用程序做出的爱心跳动效果,非常炫。

网上各个大佬也是纷纷给出看法,综合就是不太可能用C语言来实现的。

大概率是AE这种做特效软件实现的,毕竟里面的编程语言、编辑器、程序出现太多问题啦。

下面小F就给大家分享各个版本的跳动爱心,有兴趣的小伙伴可以去试试,送给那个人!

 python跳动爱心

由B站UP主@码农高天原创,博客园@清风来叙魔改,我们来看看效果吧。

涉及到了不少数学知识,需定义曲线函数,然后去调整爱心跳动周期。

源代码如下,感兴趣的小伙伴可以去试试。

可玩的东西还是挺多的,比如改变颜色,添加字幕,打包成exe,然后发给别人。

import randomfrom math import sin, cos, pi, logfrom tkinter import *canvas_WIDTH = 640  # 画布的宽CANVAS_HEIGHT = 480  # 画布的高CANVAS_CENTER_X = CANVAS_WIDTH / 2  # 画布中心的X轴坐标CANVAS_CENTER_Y = CANVAS_HEIGHT / 2  # 画布中心的Y轴坐标IMAGE_ENLARGE = 11  # 放大比例HEART_COLOR = "#ff2121"  # 心的颜色,这个是中国红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 - dydef 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 - dydef 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()

② Python爱心泡泡

Python做一个爱心泡泡机。

使用turtle海龟库进行绘制,代码如下。

import turtleimport randomimport math# 初始化turtle.setup(1280, 720)t = turtle.Pen()t.ht()# 颜色colors = []t_list = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"]for i in t_list:    t_str = "#ff00"    for j in t_list:        colors.append(t_str+i+j)class Love():    def __init__(self):        # 定义变量        self.r = random.randint(4, 10)        self.x = random.randint(-900, 700)        self.y = random.randint(-400, 400)        self.i = random.randint(0, 10)        self.color = random.choice(colors)        self.speed = random.randint(1, 8)    def move(self):        # 通过y坐标来控制爱心        if self.y <= 500:            self.y += 2.5*self.speed            self.x = self.x + 1.5*math.sin(self.i)*math.sqrt(self.i)*self.speed            self.i = self.i + 0.1        else:            self.y = -700            self.r = random.randint(5, 20)            self.x = random.randint(-900, 700)            self.i = 0            self.color = random.choice(colors)            self.speed = random.randint(1, 8)    def draw(self):        # 绘制爱心        t.pensize(self.r/2)        t.penup()        t.color(self.color, self.color)        t.Goto(self.x, self.y)        t.pendown()        # 设置角度        t.setheading(60)        t.circle(self.r, 255)        t.fd(2.4*self.r)        t.left(90)        t.fd(2.4*self.r)        t.circle(self.r, 255)love = []for i in range(100):    love.append(Love())turtle.bGColor("#000000")while 1:    turtle.tracer(0)    t.clear()    for i in range(80):        love[i].move()        love[i].draw()    turtle.tracer(1)

③ JavaScript

下面这8个案例,都是通过浏览器打开,是网页版本,来源于CodePen。

CodePen是一个非常有趣的前端案例网站,同时可在线对前端代码进行编辑,制作测试页面及代码调试。

地址:https://codepen.io/

主要是通过javascriptCSS来实现的,视觉效果很震撼。

然后这几个案例的代码,小F也都整理好咯。

使用浏览器打开dist文件夹下的index.html文件,即可看到下面这些画面,各式各样的爱心。

是不是还挺酷的。

大家可以在此基础之上,加上文字,比如相识多少天。

时间差计算代码如下。

    time_test    function show_runtime() {      window.setTimeout("show_runtime()", 1000); X = new        Date("01/01/2022 00:00:00");      Y = new Date(); T = (Y.getTime() - X.getTime()); M = 24 * 60 * 60 * 1000;      a = T / M; A = Math.floor(a); b = (a - A) * 24; B = Math.floor(b); c = (b - B) * 60; C = Math.floor((b - B) * 60); D = Math.floor((c - C) * 60);      runtime_span.innerHTML = "XX和XX相识: " + A + "天" + B + "小时" + C + "分" + D + "秒"    } show_runtime();


对于上面的网页最好是部署在服务器上,这样就能在互联网上进行访问。

可以通过一个Centos系统服务器,用Nginx又或者是Httpd进行实现。

然后就可以把网站地址发出去啦!

参考链接:

https://www.bilibili.com/video/BV16g411B7Ff/

https://www.cnblogs.com/minuy/p/16868038.html

https://blog.csdn.net/m0_50370837/article/details/126134603

来源地址:https://blog.csdn.net/qq_27595745/article/details/128356074

--结束END--

本文标题: 如何用Python制作一个动态爱心效果

本文链接: https://www.lsjlt.com/news/423681.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何用Python制作一个动态爱心效果
    目录 ① Python跳动爱心 ② Python爱心泡泡 ③ JavaScript 最近「点燃我,温暖你」这部剧非常火,讲述的是程序员的爱情故事。 其中陈飞宇饰演的男主李峋,在剧中用程序做出的爱心跳动效果,非常炫。 网上各个大佬也是纷...
    99+
    2023-10-05
    python 开发语言
  • 用Python制作一个动态爱心效果!
    大家好,我是小F~ 最近「点燃我,温暖你」这部剧非常火,讲述的是程序员的爱情故事。 其中陈飞宇饰演的男主李峋,在剧中用程序做出的爱心跳动效果,非常炫。 网上各个大佬也是纷纷给出看法,综合就是不太可能用C语言来实现的。 大概率...
    99+
    2023-09-10
    python 开发语言
  • 「点燃我,温暖你」用Python制作一个动态爱心效果
    最近「点燃我,温暖你」这部剧非常火,讲述的是程序员的爱情故事。 其中陈飞宇饰演的男主李峋,在剧中用程序做出的爱心跳动效果,非常炫。 网上各个大佬也是纷纷给出看法,综合就是不太可能用C语言来实现的。 ...
    99+
    2023-10-09
    python 开发语言 爱心代码 效果 html
  • 怎么用css制作一个简单的爱心效果
    这篇文章主要讲解了“怎么用css制作一个简单的爱心效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用css制作一个简单的爱心效果”吧! ...
    99+
    2024-04-02
  • HTML5怎么制作3D爱心动画效果
    本文小编为大家详细介绍“HTML5怎么制作3D爱心动画效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“HTML5怎么制作3D爱心动画效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新...
    99+
    2024-04-02
  • 如何使用python画一个爱心
    如何使用python画一个爱心?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开发,众多大...
    99+
    2023-06-14
  • 如何使用纯CSS绘制一个爱心
    小编给大家分享一下如何使用纯CSS绘制一个爱心,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!css的全称是什么css的全称是Cascading Style She...
    99+
    2023-06-14
  • 使用c语言编写一个爱心效果
    使用c语言编写一个爱心效果?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、说明用函数分别控制行间隔,输出*(爱心用*够成),换行。然后每个涵数内加一层循环,用数组控制循环次数...
    99+
    2023-06-15
  • 使用Python怎么绘制一个爱心树
    今天就跟大家聊聊有关使用Python怎么绘制一个爱心树,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、爱心树import turtleimport random...
    99+
    2023-06-14
  • Python如何制作表白爱心合集
    这篇文章将为大家详细讲解有关Python如何制作表白爱心合集,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。正文一、爱心表白:做我女朋友吧,行就行,不行我再想想办法1)效果展示2)附主程序t=turtle....
    99+
    2023-06-28
  • 如何利用Python制作心型照片墙效果
    这篇文章主要介绍“如何利用Python制作心型照片墙效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何利用Python制作心型照片墙效果”文章能帮助大家解决问题。先将需要的非标准库梳理一下,只有...
    99+
    2023-06-30
  • Python如何17行代码画一个爱心
    🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0&...
    99+
    2023-10-18
    python 开发语言 笔记 经验分享 virtualenv
  • Css3如何制作动态开关的效果
    小编给大家分享一下Css3如何制作动态开关的效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!<!DOCTYPE html...
    99+
    2024-04-02
  • 基于Flutter制作一个心碎动画特效
    目录前言实现步骤1、绘制一个心2、绘制心的裂痕3、加入动画完整代码小结前言 继续动画探索,今天用Flutter制作一个心碎的感觉,灵感来源于今天的股市,哎,心哇凉哇凉的。废话不多说,...
    99+
    2024-04-02
  • 如何基于Flutter实现爱心三连动画效果
    这篇文章主要为大家展示了“如何基于Flutter实现爱心三连动画效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何基于Flutter实现爱心三连动画效果”这篇文章吧。前言我们开始 Flutt...
    99+
    2023-06-29
  • 如何用css3制作按钮并添加动态效果
    本篇内容主要讲解“如何用css3制作按钮并添加动态效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用css3制作按钮并添加动态效果”吧! ...
    99+
    2024-04-02
  • Dreamweaver如何制作一个开场动画效果的网页
    这篇文章主要介绍了Dreamweaver如何制作一个开场动画效果的网页,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法如下我们来到Dreamweaver的目录,双击打开&n...
    99+
    2023-06-08
  • 如何在Android中使用SurfaceView制作一个天气动画效果
    如何在Android中使用SurfaceView制作一个天气动画效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先是最终实现的效果图:初识 SurfaceV...
    99+
    2023-05-31
    android surfaceview sur
  • 利用Python制作心型照片墙效果
    每到一年一度的520等节假日,作为一个地地道道的程序猿心里慌得一批。除了吃饭买礼物看电影好像就没有更多的想法了,于是想想将女友从以前到现在的所有照片整理了一下准备制作一个前所未有的照...
    99+
    2024-04-02
  • CSS3怎么绘制一个小雨滴动态效果
    本篇内容介绍了“CSS3怎么绘制一个小雨滴动态效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一步通过...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作