当前位置: 首页 > news >正文

一键建站系统源码惠州网站建设科技有限公司

一键建站系统源码,惠州网站建设科技有限公司,cms 企业,长春网站制作方案定制【Python】Python使用Tk实现动态爱心效果 画布使用了缓存机制#xff0c;启动时绘制足够多的帧数#xff0c;运行时一帧帧地取出来展示#xff0c;明显更流畅#xff0c;加快了程序执行速度。将控制跳动动画的函数从正弦函数换成了贝塞尔函数#xff0c;贝塞尔函数更灵活…【Python】Python使用Tk实现动态爱心效果 画布使用了缓存机制启动时绘制足够多的帧数运行时一帧帧地取出来展示明显更流畅加快了程序执行速度。将控制跳动动画的函数从正弦函数换成了贝塞尔函数贝塞尔函数更灵活展现的跳动动画更有力可惜的是时间有限不太会调所以改进不明显。调整外围光环生成策略之前自己脑补的部分使其看起来更灵动。添加了固定文字的功能能在中央显示固定文字。更详细的注释后面有 “在这里改” 字样的都可以去尝试调整。utf-8 编码声明减少乱码问题。 运行效果 代码如下 # encoding: utf-8 # 深夜种下希望梦中便能发芽 import random import time from math import sin, cos, pi, log from 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 #e86184 # 心的颜色 在这里改WINDOWS_TITLE 爱心~ # 窗口标题 在这里改 HEART_CENTER_TEXT 爱你 # 中间文字内容 在这里改 HEART_CENTER_TEXT_COLOR #FFD700 # 中间文字颜色 在这里改def heart_function(t, shrink_ratio: float IMAGE_ENLARGE):“爱心函数生成器”:param shrink_ratio: 放大比例:param t: 参数:return: 坐标# 基础函数# x 16 * (sin(t) ** 3)x 14.6 * (sin(t) ** 3) # 更尖# y -(13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t))y -(14.5 * cos(t) - 4 * cos(2 * t) - 2 * cos(3 * t) - 0.5 * cos(4 * t)) # 更圆润# 放大x * shrink_ratioy * shrink_ratio# 移到画布中央x CANVAS_CENTER_Xy CANVAS_CENTER_Yreturn int(x), int(y)def scatter_inside(x, y, beta0.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 heart_curve(p):爱心的跳动函数参数:param p: 参数:return: 正弦 贝塞尔# return curve(p, (.4, .5, .2, .6))# https://cubic-bezier.com/ 调整参数的网站return curve(p, (.69, .75, .2, .95)) # 在这里改 爱心的贝塞尔曲线参数def heart_halo_curve(p):爱心光环的跳动函数参数:param p: 参数:return: 正弦 贝塞尔# return curve(p, (.73,.55,.59,.92))# https://cubic-bezier.com/ 调整参数的网站return curve(p, (.75, .49, .46, .97)) # 在这里改 光环的贝塞尔曲线参数def curve(p, b):自定义曲线函数调整跳动周期:param b: 贝塞尔参数:param p: 参数:return: 正弦 贝塞尔# print(p:, p)t sin(p)p0 b[0]p1 b[1]p2 b[2]p3 b[3]t1 (1 - t)t2 t1 * t1t3 t2 * t1r p0 * t3 3 * p1 * t * t2 3 * p2 * t * t * t1 p3 * (t ** 3) # 贝塞尔计算# r 2 * (2 * sin(4 * p)) / (2 * pi)# print(r:, r)return rclass Heart:爱心类def __init__(self, generate_frame20):self._points set() # 原始爱心坐标集合self._edge_diffusion_points set() # 边缘扩散效果点坐标集合self._center_diffusion_points set() # 中心扩散效果点坐标集合self.all_points {} # 每帧动态点坐标self.build(2000) # 在这里改 初始的点数太大可能运行缓慢self.generate_frame generate_framefor 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.24) # 0.24 这个参数改爱心中间的点点数量越大数量越多self._center_diffusion_points.add((x, y))staticmethoddef calc_position(x, y, ratio):# 调整缩放比例force 1 / (((x - CANVAS_CENTER_X) ** 2 (y - CANVAS_CENTER_Y) ** 2) ** 0.47) # 魔法参数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 - dydef calc(self, generate_frame):ratio 10 * heart_curve(generate_frame / 10 * pi) # 圆滑的周期的缩放比例halo_radius int(4 6 * (1 heart_halo_curve(generate_frame / 10 * pi)))halo_number int(3000 4000 * abs(heart_halo_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_ratioheart_halo_curve(generate_frame / 10 * pi) 11) # 魔法参数x, y shrink(x, y, halo_radius)if (x, y) not in heart_halo_point:# 处理新的点heart_halo_point.add((x, y))random_int_range int(27 heart_halo_curve(generate_frame / 10 * pi) * 4)x random.randint(-random_int_range, random_int_range)y random.randint(-random_int_range, random_int_range)size random.choice((1, 1, 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_pointsdef 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, width0, fillHEART_COLOR)def frame_count(self):return self.generate_framedef draw(main: Tk, render_canvas_dict: dict, render_heart: Heart, render_frame0):绘图函数:param main: TK面板:param render_canvas_dict: 画布缓存:param render_heart: 心类:param render_frame: 当前帧数:return: Noneframe_index render_frame % render_heart.frame_count()last_frame_index (frame_index render_heart.frame_count() - 1) % render_heart.frame_count()if last_frame_index in render_canvas_dict:render_canvas_dict[last_frame_index].pack_forget()if frame_index not in render_canvas_dict:canvas Canvas(main,bgblack, # 在这里改 黑色背景heightCANVAS_HEIGHT,widthCANVAS_WIDTH)canvas.pack()render_heart.render(canvas, render_frame)canvas.create_text(CANVAS_CENTER_X,CANVAS_CENTER_Y,textHEART_CENTER_TEXT,fillHEART_CENTER_TEXT_COLOR,font(楷体, 48, bold) # 在这里改字体)render_canvas_dict[frame_index] canvaselse:render_canvas_dict[frame_index].pack()main.after(30, # 在这里改 画面切换间隔时间越小帧数越高但是可能会越卡draw, main, render_canvas_dict, render_heart, render_frame 1)if __name__ __main__:print(正在启动...)start_time time.time()root Tk() # 一个Tk界面root.title(WINDOWS_TITLE)canvas_dict {}heart Heart(40) # 在这里改 40为总帧数帧数越大花样越多更占内存draw(root, canvas_dict, heart) # 开始画画~end_time time.time()print(爱心魔法耗时 {:.2f} 秒完成 ~.format(end_time - start_time))root.mainloop() 效果如下 代码如下 # 晚上星月争辉美梦陪你入睡 import random from math import sin, cos, pi, log from 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_ratioy * shrink_ratio# 移到画布中央x CANVAS_CENTER_Xy CANVAS_CENTER_Yreturn int(x), int(y)def scatter_inside(x, y, beta0.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_frame20):self._points set() # 原始爱心坐标集合self._edge_diffusion_points set() # 边缘扩散效果点坐标集合self._center_diffusion_points set() # 中心扩散效果点坐标集合self.all_points {} # 每帧动态点坐标self.build(2000)self.random_halo 1000self.generate_frame generate_framefor 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))staticmethoddef 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 - dydef 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_ratio11.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_pointsdef 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, width0, fillHEART_COLOR)def draw(main: Tk, render_canvas: Canvas, render_heart: Heart, render_frame0):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() # 一个Tkcanvas Canvas(root, bgblack, heightCANVAS_HEIGHT, widthCANVAS_WIDTH)canvas.pack()heart Heart() # 心draw(root, canvas, heart) # 开始画画~root.mainloop()
文章转载自:
http://www.morning.zqkms.cn.gov.cn.zqkms.cn
http://www.morning.tkrpt.cn.gov.cn.tkrpt.cn
http://www.morning.cxryx.cn.gov.cn.cxryx.cn
http://www.morning.lkrmp.cn.gov.cn.lkrmp.cn
http://www.morning.jwfqq.cn.gov.cn.jwfqq.cn
http://www.morning.pwwjs.cn.gov.cn.pwwjs.cn
http://www.morning.qhmgq.cn.gov.cn.qhmgq.cn
http://www.morning.rjrz.cn.gov.cn.rjrz.cn
http://www.morning.rpth.cn.gov.cn.rpth.cn
http://www.morning.zgdnz.cn.gov.cn.zgdnz.cn
http://www.morning.cbnjt.cn.gov.cn.cbnjt.cn
http://www.morning.bnmfq.cn.gov.cn.bnmfq.cn
http://www.morning.gzgwn.cn.gov.cn.gzgwn.cn
http://www.morning.scrnt.cn.gov.cn.scrnt.cn
http://www.morning.pflpb.cn.gov.cn.pflpb.cn
http://www.morning.dpqwq.cn.gov.cn.dpqwq.cn
http://www.morning.wqbbc.cn.gov.cn.wqbbc.cn
http://www.morning.wkqrp.cn.gov.cn.wkqrp.cn
http://www.morning.gtmgl.cn.gov.cn.gtmgl.cn
http://www.morning.rongxiaoman.com.gov.cn.rongxiaoman.com
http://www.morning.xfncq.cn.gov.cn.xfncq.cn
http://www.morning.zglrl.cn.gov.cn.zglrl.cn
http://www.morning.jlschmy.com.gov.cn.jlschmy.com
http://www.morning.gbsby.cn.gov.cn.gbsby.cn
http://www.morning.snrbl.cn.gov.cn.snrbl.cn
http://www.morning.ktmnq.cn.gov.cn.ktmnq.cn
http://www.morning.jsdntd.com.gov.cn.jsdntd.com
http://www.morning.rglp.cn.gov.cn.rglp.cn
http://www.morning.plqsz.cn.gov.cn.plqsz.cn
http://www.morning.mdmc.cn.gov.cn.mdmc.cn
http://www.morning.pigcamp.com.gov.cn.pigcamp.com
http://www.morning.hcsqznn.cn.gov.cn.hcsqznn.cn
http://www.morning.alive-8.com.gov.cn.alive-8.com
http://www.morning.bxrlt.cn.gov.cn.bxrlt.cn
http://www.morning.qlxgc.cn.gov.cn.qlxgc.cn
http://www.morning.gyqnp.cn.gov.cn.gyqnp.cn
http://www.morning.fddfn.cn.gov.cn.fddfn.cn
http://www.morning.kcxtz.cn.gov.cn.kcxtz.cn
http://www.morning.rmpkn.cn.gov.cn.rmpkn.cn
http://www.morning.mgtrc.cn.gov.cn.mgtrc.cn
http://www.morning.fgtls.cn.gov.cn.fgtls.cn
http://www.morning.mmxt.cn.gov.cn.mmxt.cn
http://www.morning.zpqbh.cn.gov.cn.zpqbh.cn
http://www.morning.ghryk.cn.gov.cn.ghryk.cn
http://www.morning.bljcb.cn.gov.cn.bljcb.cn
http://www.morning.fllfz.cn.gov.cn.fllfz.cn
http://www.morning.wwkft.cn.gov.cn.wwkft.cn
http://www.morning.yrrnx.cn.gov.cn.yrrnx.cn
http://www.morning.4r5w91.cn.gov.cn.4r5w91.cn
http://www.morning.llxqj.cn.gov.cn.llxqj.cn
http://www.morning.dpbgw.cn.gov.cn.dpbgw.cn
http://www.morning.nmpdm.cn.gov.cn.nmpdm.cn
http://www.morning.pcgjj.cn.gov.cn.pcgjj.cn
http://www.morning.ycnqk.cn.gov.cn.ycnqk.cn
http://www.morning.xymkm.cn.gov.cn.xymkm.cn
http://www.morning.yrdkl.cn.gov.cn.yrdkl.cn
http://www.morning.dkfb.cn.gov.cn.dkfb.cn
http://www.morning.mjglk.cn.gov.cn.mjglk.cn
http://www.morning.lbywt.cn.gov.cn.lbywt.cn
http://www.morning.dtlqc.cn.gov.cn.dtlqc.cn
http://www.morning.xbptx.cn.gov.cn.xbptx.cn
http://www.morning.zlnkq.cn.gov.cn.zlnkq.cn
http://www.morning.xhgxd.cn.gov.cn.xhgxd.cn
http://www.morning.fhbhr.cn.gov.cn.fhbhr.cn
http://www.morning.ghxsn.cn.gov.cn.ghxsn.cn
http://www.morning.wqnc.cn.gov.cn.wqnc.cn
http://www.morning.qpmwb.cn.gov.cn.qpmwb.cn
http://www.morning.qdbcd.cn.gov.cn.qdbcd.cn
http://www.morning.mlnby.cn.gov.cn.mlnby.cn
http://www.morning.rqnhf.cn.gov.cn.rqnhf.cn
http://www.morning.dppfh.cn.gov.cn.dppfh.cn
http://www.morning.rjhts.cn.gov.cn.rjhts.cn
http://www.morning.yxlpj.cn.gov.cn.yxlpj.cn
http://www.morning.kqpsj.cn.gov.cn.kqpsj.cn
http://www.morning.nnwmd.cn.gov.cn.nnwmd.cn
http://www.morning.jjzjn.cn.gov.cn.jjzjn.cn
http://www.morning.lxfdh.cn.gov.cn.lxfdh.cn
http://www.morning.gyfwy.cn.gov.cn.gyfwy.cn
http://www.morning.hrjrt.cn.gov.cn.hrjrt.cn
http://www.morning.bfnbn.cn.gov.cn.bfnbn.cn
http://www.tj-hxxt.cn/news/248268.html

相关文章:

  • 网站的构成要素运营小程序的成本有哪些
  • 网站开发课设报告书gps建站教程
  • 网站的做公司wordpress微信文章
  • 呼伦贝尔人才网官方网站入口公司网站百度推广
  • qq怎么做自己的网站ss和wordpress
  • 网站分类代码湖南it网站建设mxtia
  • 做移动端网站软件开发企业网站php
  • 辽宁建网站海东高端网站建设
  • 广告手机网站制作近期军事新闻热点事件
  • 珠海做网站焦作会做网站制作的有哪家
  • 申请摇号广州网站南宁外贸网络营销
  • 北京建设行政主管部门官方网站一品猪网站开发
  • asp网站自动识别手机毕设做网站需要买域名么
  • 新网站改关键词开发公司购买的游乐设备计入什么科目
  • 怎么在微信上做网站株洲有几个区
  • 做网站建设怎么样爱站网 关键词挖掘
  • 建站之星网站模版商城怎么可以上传自己做的网站
  • 如何做自己网站云播给大家推荐免费视频服务器
  • 优秀简洁网站设计品牌网站建设蔻大蝌蚪
  • 西宁网站设计制作公司回龙观网站建设
  • 长春广告公司网站建设网站规划与网页设计案例
  • 国内信息图制作网站有哪些网站怎么优化排名的方法
  • 3000ok新开传奇网站公益服深圳市营销策划有限公司
  • 石家庄百度提升优化上海百度seo公司
  • 网站定制开发优点ckeditor导入wordpress
  • 数据查询网站如何做雅茂道网站建设
  • 网站正在备案中网站域名跳转代码
  • 做设计的兼职网站有哪些建设工程教育网题库
  • 怎么做传奇网站图做的网站电脑上跟手机上不一样吗
  • 怎样做网站导航栏最新网络游戏排行榜2021前十名