m0_75072626 2022-11-09 17:19 采纳率: 100%
浏览 157
已结题

这个爱心代码到底哪里出错了

这个爱心代码到底哪里出错了
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()中两个参数这能是大于零的整数,但不知道怎么改

我想要达到的结果

怎么让他运行成功啊!

  • 写回答

2条回答 默认 最新

  • honestman_ 2022-11-09 17:27
    关注

    缩进格式问题:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月17日
  • 已采纳回答 11月9日
  • 创建了问题 11月9日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。