这个爱心代码到底哪里出错了
import random
from math import sin,cos,pi,log
from tkinter import*
CANVAS_WIDTH=640
CANVAS_HEIGHT=480
CANVAS_CENITER_X=CANVAS_WIDTH/2
CANVAS_CENITER_Y=CANVAS_HEIGHT/2
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)
dx=ratio_y*(x-CANVAS_CENTER_Y)
return x-dx,y-dy
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*(x-CANVAS_CENTER_Y)
return x-dx,y-dy
def curve(p):
"""
自定义曲线函数,调整跳动周期
:param p:参数
:return:正弦
"""
return 2*(2*sin(4*p))/(2*pi)
class Heart:
"""
爱心类
"""
def _init_(self,generate_frame=20):
self._pionts=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+((x-CANVAS_CENTER_X)**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):
radio=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,dender_heart,render_frame+1)
if _name_=='-main_':
root=Tk()
canvas=Canvas(root,bg='black',height=CANVAS_HEIGHT,width=CANVAS_WIDTH)
canvas.pack()
heart=Heart()
draw(root,canvas,heart)
root.mainloop()
运行结果及报错内容
File "<ipython-input-20-c16f062226a8>", line 93
dx=ratio*force*(x-CANVAS_CENTER_X)+random.randint(-1, 1)
^
SyntaxError: invalid syntax
我的解答思路和尝试过的方法
查了random.randnit()中两个参数这能是大于零的整数,但不知道怎么改
我想要达到的结果
怎么让他运行成功啊!