代码原作者是【抖音:无所不能的法学生小黑】
代码原作者是【抖音:无所不能的法学生小黑】
代码原作者是【抖音:无所不能的法学生小黑】
重要的事情说三次

import random
import sys
from math import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *'''获取爱心坐标,下列方法只可选一'''
# 方法一:推荐,爱心圆滑,高度还原
'''
import turtle
turtle.setup(1200,800)
turtle.delay (0)
turtle.goto (0,-200)
turtle.begin_poly()
turtle.setheading (150)
turtle.fd (70)
turtle.circle(70 * -3.745, 45)
turtle.circle(70 * -1.431, 165)
turtle.left(120)
turtle.circle(70 * -1.431, 165)
turtle.circle(70 * -3.745, 45)
turtle.fd(70)
turtle.end_poly()
angle_coord_list=turtle.get_poly()
turtle.bye()
'''
# print(angle_coord_list)#打印坐标看看# 方法二 不推荐,爱心不圆润、报看
# 《点燃你温暖你)李岣敲的代码是这个,但显示的爱心画面不是这个
# 应该是导演也觉得不好看,但是方法二画圆显得有技术含量
'''
angle_coord_list2=[]
for i in range(3600):heart_x=16*sin(i*pi/180)*sin(i*pi/180)*sin(i*pi/180)heart_y=13*cos(i*pi/180)-5*cos(2*i*pi/180)-2*cos(3*i*pi/180)-cos(4*i*pi/180)angle_coord_list2.append((heart_x,heart_y))
'''
#print(angle_coord_list2)#打印坐标看看#方法三 极度推荐
#这是用第一种方法得到的坐标,可以直按用,减少CPU使用
angle_coord_list = ((0.00, -200.00), (-86.60, -150.00), (-117.49, -130.08), (-146.28, -107.24), (-172.69, -81.68),(-196.46, -53.65), (-217.38, -23.43), (-235.23, 8.69), (-249.85, 42.41), (-261.09, 77.40),(-265.49, 102.74), (-265.28, 128.46), (-260.47, 153.73), (-251.21, 177.73), (-237.81, 199.68),(-220.69, 218.88), (-200.41, 234.70), (-177.63, 246.64), (-153.08, 254.31), (-127.55, 257.46),(-101.87, 255.99), (-76.87, 249.94), (-53.36, 239.52), (-32.09, 225.05), (-13.75, 207.02),(1.06, 185.99), (15.87, 207.02), (34.21, 225.05), (55.48, 239.52), (78.99, 249.94),(103.99, 255.99), (129.67, 257.46), (155.20, 254.31), (179.75, 246.64), (202.53, 234.70),(222.81, 218.88), (253.33, 177.73), (262.59, 153.73), (267.40, 128.46),(267.61, 102.74), (263.21, 77.40), (251.97, 42.41), (237.35, 8.69), (219.50, -23.43),(198.58, -53.65), (174.81, -81.68), (148.40, -107.24), (119.61, -130.08), (88.72, -150.00),(2.12, -200.00))'''第三步:处理上述坐标(第一种方法),获得更多详细坐标'''
#初始化 新爱心坐标列表
new_coord_list= []
#用旧坐标生成新坐标
for order2, angle_coord in enumerate(angle_coord_list):if order2 + 1 < len(angle_coord_list):#以0.25为间隔,计算两点之间需要分成多少份pointnum_x = int(abs(angle_coord_list[order2 + 1][0] - angle_coord_list[order2][0]) / 0.25)pointnum_y = int(abs(angle_coord_list[order2 + 1][1] - angle_coord_list[order2][1]) / 0.25)#取两值之间大的一个,如果不取,会出现点分布不均匀的情况pointnum = max(pointnum_x, pointnum_y)#计算两点之间横纵左边的最小步距step_x = ((angle_coord_list[order2 + 1][0] - angle_coord_list[order2][0]) / pointnum)step_y = ((angle_coord_list[order2 + 1][1] - angle_coord_list[order2][1]) / pointnum)#一次得出新坐标的每个X,Y值for i in range(pointnum):new_coord = (round(angle_coord_list[order2][0] + (i + 1) * step_x, 2),round(angle_coord_list[order2][1] + (i + 1) * step_y, 2),)if new_coord not in new_coord_list:#新爱心坐标列表依次获取new_coord_list.append(new_coord)#定义pyqt5类的类(心累)
class QheartWindow(QMainWindow):# python类的初始化initdef __init__(self):#类的维承super(QheartWindow, self).__init__(None)#基础部件self.setWindowTitle('Love')self.resize(QDesktopWidget().screenGeometry().width(), # 尺寸QDesktopWidget().screenGeometry().height())self.move(0, 0)self.setStyleSheet("QMainWindow{background-color:#000000}")# 背景为黑# 运行主过程self.startTimer(50) # 设置界面刷新时间 1000=1s(电脑算例不够回不流畅)self.readlist = 0 # 画面显示的第几界面(用10个界面的不规律循环产生心跳效果)self.largen = True # 确定心脏是该收缩还是舒展self.cen_x = QDesktopWidget().screenGeometry().width() / 2 # 确定心脏的中心点坐标self.cen_y = QDesktopWidget().screenGeometry().height() / 2 - 50 # 确定心脏的中心点纵坐标self.cent = 100 # 弥补心脏中心空洞的矩形范围的一半self.makecoord() # 生成所有点的坐标及属性def makecoord(self, expend=None):# 产生主爱心的点self.coord_list1 = [] # 初始化心脏的坐标列表self.all_coord_list1 = [] # 初始化主心脏跳动起来(每帧)的所有坐标列表'''确定爱心从外层到内层,各个层级的稠密程度用圆形'x平方+y平方=100的平方'的公式确定延伸,因为当x趋近于0时,y不仅值大且y变化平缓,正好符合剧中爱心的外密内稀我尝试过高斯分布等,效果都没这个好'''expend_list = [int(9*round(sqrt(10000-(i*i)), 4))+200 for i in range(0, 105, 5)]# 用循环读取稠密程度列表for order, expend in enumerate(expend_list):# 偏移程度参数,越内圈越离散,# (这个公式别问为什么,巨复杂)offset = int((len(expend_list) - sqrt((len(expend_list) ** 2)- ((order + 1) ** 2)) + order + 2) * 0.8)# 读取爱心坐标来生成更多点for new_coord in new_coord_list:# 这一步可以控制生成点的多少,现在我设置的只输出1/8的点if random.randint(1, 8) == 1:# 随机生成点的尺寸,有大有小比较好看size = random.randint(1, 4)# 调用上边的调密程度参数生成内外各个层级的点heart_x = (new_coord[0] * (sqrt(expend) * 0.024))heart_y = (new_coord[1] * (sqrt(expend) * 0.026))# 转换为屏幕中心的点,因为屏幕左上角才为pyqt5的(0,0)点x = int(heart_x + self.width() / 2)y = int((-heart_y) + self.height() / 2)# 随机生成偏移量draw_x = x + random.randint(-offset, offset)draw_y = y + random.randint(-offset, offset)# 随机生成颜色(我用PS试的颜色,可以自己调整)colorint = random.randint(1, 7)if colorint == 1:color = QColor(190, 43, 77)elif colorint == 2:color = QColor(255, 181, 198) # 白粉elif colorint == 3:color = QColor(161, 25, 45) # 深红elif colorint == 4:color = QColor(232, 51, 92)elif colorint == 5:color = QColor(255, 0, 0) # 红色# 根据颜色需求调解,比如主爱心白色较多,就在下面又引用了白粉色else:color = QColor(255, 181, 198) # 白粉#为了省内存,也为了画面更流畅,这里只添加不同坐标、属性的点if (draw_x, draw_y, size, color) not in self.coord_list1:self.coord_list1.append((draw_x, draw_y, size, color))# 把初始化的爱心点列表作为画面第1帧self.all_coord_list1.append(self.coord_list1)'''!!!重点来了!!! 下面做出心脏跳动的效果'''for su in range(1, 10): # 因为我分了10帧,所以要生成后9顿的点coord_temporary1 = []# 遍历第1帧所有点for coord in self.coord_list1:'''跳动效果公式基本原理是根据各点与中心点的距离远近改变向外放大的程度就有了内圈变化更剧烈的效果(跳动)'''flexk = ((536 - 1.11111111111 * sqrt(((coord[0] - self.cen_x) ** 2) +((coord[1] - self.cen_y) ** 2))) * 0.00006 * su) - (su * 0.01 + 0.017)# 保证放大参数为正数if flexk < 0:flexk = 0# 高中学的以特定点为中心放大缩小公式new_x = self.cen_x - (1 + flexk) * (self.cen_x - coord[0])new_y = self.cen_y - (1 + flexk) * (self.cen_y - coord[1])# 收集起来coord_temporary1.append((new_x, new_y, coord[2], coord[3]))# 保存到下一帧self.all_coord_list1.append(coord_temporary1)# 产生爱心外面飘散的点# 这部分同产生主爱心的原理,参数有调整,不再赘述self.coord_list2 = []self.all_coord_list2 = [] # 这个列表的点为实时无规律变化,不同于主爱心的点有规律# 注意这里i只到90,否则爱心中心不好看expend_list = [int(round(sqrt(10000 - (i * i)) + 100 - 1, 4)) for i in range(0, 92, 5)]for order, expend in enumerate(expend_list):offset = int(len(expend_list) - sqrt((len(expend_list) ** 2) - ((order + 1) ** 2)) + 2) + 10for new_coord in new_coord_list:if random.randint(1, 7) == 1:size = random.randint(1, 3)heart_x = new_coord[0] * (sqrt(expend) * 0.075)heart_y = new_coord[1] * (sqrt(expend) * 0.078)x = int(heart_x + self.width() / 2)y = int((-heart_y) + self.height() / 2)# 偏移量draw_x = x + random.randint(-offset, offset)draw_y = y + random.randint(-offset, offset)# 外围颜色更深,所以布局如下colorint = random.randint(1, 10)if colorint == 1: # 粉色color = QColor(190, 43, 77)elif colorint == 2:color = QColor(255, 181, 198) # 白粉elif colorint == 3 or colorint == 5:color = QColor(161, 25, 45) # 深红elif colorint == 4:color = QColor(232, 51, 92)elif colorint == 7:color = QColor(255, 0, 0) # 红色else:color = QColor(214, 79, 100)if (draw_x, draw_y, size, color) not in self.coord_list2:self.coord_list2.append((draw_x, draw_y, size, color))# 爱心中心黑区的点,为了好看弥补黑区,同上for expendx in range(-self.cent, self.cent):for expendy in range(-self.cent, self.cent):if random.randint(1, 100) == 1:size = random.randint(1, 3)heart_x = expendxheart_y = expendyx = int(heart_x + self.width() / 2)y = int(heart_y + self.height() / 2 - 40)# 偏移量offset = 20draw_x = x + random.randint(-offset, offset)draw_y = y + random.randint(-offset, offset)# 颜色colorint = random.randint(1, 10)if colorint == 1:color = QColor(190, 43, 77)elif colorint == 2:color = QColor(255, 181, 198) # 白粉elif colorint == 3 or colorint == 5:color = QColor(161, 25, 45) # 深红elif colorint == 4:color = QColor(232, 51, 92)elif colorint == 7:color = QColor(255, 0, 0) # 红色else:color = QColor(214, 79, 100)if (draw_x, draw_y, size, color) not in self.coord_list2:self.coord_list2.append((draw_x, draw_y, size, color))# 定义实时刷新画面方法def paintEvent(self, event):self.painter = QPainter(self) # 我用的QPainterself.painter.begin(self)if self.readlist >= 0:#外围的点实时无规则变化刷新,更有感觉coord_temporary2 = []offset = (9 - self.readlist) * 6if offset > 0:for coord in self.coord_list2:new_x = coord[0] + random.randint(-offset, offset)new_y = coord[1] + random.randint(-offset, offset)coord_temporary2.append((new_x, new_y, coord[2], coord[3]))else:coord_temporary2 = self.coord_list2# 主爱心规律变化,更像心脏self.all_coord_list = self.all_coord_list1[self.readlist] + coord_temporary2# 遍历所有点出一帧画面for coord in self.all_coord_list:if coord[2] <= 3: # 如果点尺寸小于3这么画好看self.pen = QPen()self.pen.setColor(coord[3])self.pen.setWidth(coord[2])self.painter.setPen(self.pen)self.painter.drawPoint(coord[0], coord[1], )else: # 如果点尺寸不小于3那么画好看self.painter.setBrush(coord[3])self.painter.drawEllipse(coord[0], coord[1], coord[2] - 1, coord[2] - 1)self.painter.end()# 如果已最大则开始变小if self.readlist == 9:self.largen = False# 如果已最小则开始变大elif self.readlist == 0:self.largen = Trueif self.largen == True:self.readlist += 1 # 变大一号elif self.largen == False:self.readlist -= 1 # 变小一号# 实时刷新def timerEvent(self, event):self.update()if __name__ == '__main__':# 实例化app = QApplication(sys.argv)window = QheartWindow()window.show()sys.exit(app.exec_())

[Python]《点燃我,温暖你》李峋同款爱心代码相关推荐

  1. 李峋同款爱心代码 (超好看) | 电视剧《点燃我温暖你》

    李峋同款爱心代码 (超好看) | 电视剧<点燃我温暖你> 废话不多说,上代码: import random from math import sin, cos, pi, log from ...

  2. 李峋同款爱心代码(附源码,前端代码,python代码)

    Hello 大家好 如何浪漫的表白,作为程序员出身的小编,今天就带你实现热播剧<点燃我,温暖你>中超火的李峋同款爱心代码!前面是教程,怕麻烦的朋友可以直接划到文末,下载现成的,下载完成后打 ...

  3. Python版李峋同款爱心代码来了!!

    李峋是谁?我也不太清楚! 但是最近看到不少关于李峋同款爱心的视频和文章 今天也来分享一下李峋同款爱心的相关代码,如下! import random from math import sin, cos, ...

  4. HTML文本抖音李峋同款爱心代码超好看

    热播剧李峋的超炫爱心代码同款,让你现实中感受电视剧情节,拿去感受感受计算机天才的魅力吧~ 代码展示 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. ...

  5. 李峋同款爱心代码-电视剧《点燃我温暖你》

    浅浅模仿了一下李峋同款跳动的心,用python完成,引用了tkinter库,最后效果图如图1所示.电视剧里面应该是用AE做的动画(大概率是). """ @author:A ...

  6. 李峋同款爱心代码【有声版】

    一.工具准备 1.安装Pycharm 1.1双击pycharm-professional-2020.1.exe一直下一步即可. 1.2将图中所框目录放到桌面(脚本有需要的评论留言) 1.3双击图中所框 ...

  7. 李峋同款爱心代码(附源码)

    李峋同款浪漫爱心代码(快拿去给爸爸妈妈,给男(女)朋友看!!!) 基于新建文件基础上.txt文档 <html> <head><meta charset="utf ...

  8. 【Python】《点燃我,温暖你》,快来Get李峋同款爱心代码

    前言 hello,大家好 最近有个剧挺火的 就是那个程序员的剧,叫<点燃我,温暖你> 最近听说很火呀,那作为程序员,Python中的战斗机的小编,能不给大家安排一波! 怎么说呢,用这个表白 ...

  9. 李峋同款爱心代码,表白神器!

    背景 最近<点燃我温暖你>中李峋的爱心代码超级火,我在刷b站的时候,偶尔能刷到,然后就点进去看了下,觉得还挺有意思.于是网上搜了一下,挺多复现例子.我找了个看似最火的复现代码,分享一下- ...

最新文章

  1. flip java_java的flip(). 这里用flip()有什么作用?这是反转缓冲区的方法,好像用不上。...
  2. LeetCode 1618. 找出适应屏幕的最大字号(二分查找)
  3. 商标申请的企业法律服务可避免法律风险
  4. Android camera开发(9)---Dual Camera(MTK solution)开案说明
  5. flutter创建一个demo
  6. 练习:string.h常用字符串
  7. Python:日期和时间类型学习
  8. Atitit io读取文件法 目录 1. 文件法 1 1.1. 异步读取文件: 1 1.2. 2.同步读取方法 1 1.3. 二进制读文件: 1 2. 读取api规范 1 3. Atitit 按照
  9. python3+selenium入门03-操作谷歌浏览器
  10. 华为NP课程笔记24-BFD
  11. 【无标题】用ubuntu通过c语言实现俄罗斯方块小游戏的方案及改进思路
  12. qgis二次开发环境
  13. Swift-Moya 源码解析
  14. 零跑坚持自主研发,探索数字时代的驾驶体验
  15. 怎么样可以批量下载网页图片?
  16. 洛谷日报索引(2020、2019、2018)
  17. SXSSFWorkbook 表格内换行
  18. 内网服务器反弹映射到公网ip去访问
  19. 光敏二极管血氧仪方案设计研发
  20. e3mall Day06

热门文章

  1. Python中5种下划线的含义
  2. java马赛克_java实现图片缩放、旋转和马赛克化
  3. iMeta | 华南农大陈程杰/夏瑞等发布TBtools构造Circos图的简单方法
  4. 20182316胡泊 第2,3周学习总结
  5. 阿龙的学习笔记--- Docker 的一些概念总结
  6. JavaOne美国之行–Session篇
  7. 抽鬼牌(poker)
  8. 给通信专业研究生——安心完成培养,你不是在劣势下和计算机学生抢饭碗来的
  9. 大型网站技术架构演进
  10. 机器学习笔记--PR曲线和ROC曲线