找回密码
 会员注册
查看: 35|回复: 0

超好看python爱心代码(附源码)

[复制链接]

4

主题

0

回帖

13

积分

新手上路

积分
13
发表于 2024-9-13 12:54:26 | 显示全部楼层 |阅读模式
直接上代码importrandomfrommathimportsin,cos,pi,logfromtkinterimport*CANVAS_WIDTH=640CANVAS_HEIGHT=480CANVAS_CENTER_X=CANVAS_WIDTH/2CANVAS_CENTER_Y=CANVAS_HEIGHT/2IMAGE_ENLARGE=11#设置颜色HEART_COLOR="#FF99CC"defcenter_window(root,width,height):screenwidth=root.winfo_screenwidth()#获取显示屏宽度screenheight=root.winfo_screenheight()#获取显示屏高度size='%dx%d+%d+%d'%(width,height,(screenwidth-width)/2,(screenheight-height)/2)#设置窗口居中参数root.geometry(size)#让窗口居中显示defheart_function(t,shrink_ratio:float=IMAGE_ENLARGE):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_Yreturnint(x),int(y)defscatter_inside(x,y,beta=0.15):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)returnx-dx,y-dydefshrink(x,y,ratio):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)returnx-dx,y-dydefcurve(p):return2*(2*sin(4*p))/(2*pi)classHeart: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=1000self.generate_frame=generate_frameforframeinrange(generate_frame):self.calc(frame)defbuild(self,number):for_inrange(number):t=random.uniform(0,2*pi)x,y=heart_function(t)self._points.add((x,y))#爱心内扩散for_x,_yinlist(self._points):for_inrange(3):x,y=scatter_inside(_x,_y,0.05)self._edge_diffusion_points.add((x,y))#爱心内再次扩散point_list=list(self._points)for_inrange(4000):x,y=random.choice(point_list)x,y=scatter_inside(x,y,0.17)self._center_diffusion_points.add((x,y))@staticmethoddefcalc_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)returnx-dx,y-dydefcalc(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_inrange(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)notinheart_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))#轮廓forx,yinself._points:x,y=self.calc_position(x,y,ratio)size=random.randint(1,3)all_points.append((x,y,size))#内容forx,yinself._edge_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_pointsforx,yinself._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_pointsdefrender(self,render_canvas,render_frame):forx,y,sizeinself.all_points[render_frame%self.generate_frame]:render_canvas.create_rectangle(x,y,x+size,y+size,width=0,fill=HEART_COLOR)defdraw(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()root.title("爱心")center_window(root,CANVAS_WIDTH,CANVAS_HEIGHT)#窗口居中显示canvas=Canvas(root,bg='black',height=CANVAS_HEIGHT,width=CANVAS_WIDTH)canvas.pack()heart=Heart()draw(root,canvas,heart)Label(root,text="Iloveyou",bg="black",fg="#FF99CC",font="Helvetic20bold").place(relx=.5,rely=.5,anchor=CENTER)root.mainloop()123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-25 13:51 , Processed in 0.346369 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表