Помогите разработать алгоритм нахождения центра polygon

import tkinter as tk
from random import randrange as rnd, choice
import math
from math import pi, sin, cos
import time


root = tk.Tk()
canv = tk.Canvas(root,bg='white')
counterOchkov = 0
label1 = tk.Label(text=counterOchkov, fg="#eee", bg="#333")
label1 = tk.Label(text=counterOchkov, fg="black")

'''
form = Форма круг,  круг, звезда
color = Цвет случайный из списка
size = Размер диаметр(2R), a, диаметр(2R)
bonus = Бонус
f = Частота появления
v = скорость движения
a = угол поворота при столкновении 180-a
sprite = спрайт(сам объект)
'''
colors = ['red','orange','yellow','green','blue']
target = dict(form="circle",color="red",size=30,bonus=1,f=2,v=7,a=30,sprite='')
target_forms = ["circle","rect","star"]
targets = []



def main():
    global root, canv
    root.geometry('1000x700')
    canv.pack(fill=tk.BOTH,expand=1)
    canv.bind('<Button-1>', click)
    #draw_ball()
    #draw_rect()
    draw_star()
    root.mainloop()



def draw_ball():
    global root, canv, colors, targets
    target1 = target.copy()
    x = rnd(100,700)
    y = rnd(100,500)
    r = rnd(30,50)
    target1["form"] = "circle"
    target1["color"] = str(choice(colors))
    target1["size"] = r*2
    target1["bonus"] = 1
    target1["f"] = 1
    target1["v"] = 8
    target1["a"] = 30
    target1["sprite"] = canv.create_oval(x-r,y-r,x+r,y+r,fill = target1["color"], width=0)
    time = int(1000/target1["f"])
    root.after(time,draw_ball)
    targets.append(target1)




def draw_rect(): 
    global root, canv, colors
    target1 = target.copy()
    x = rnd(100,700)
    y = rnd(100,500)
    a = rnd(30,50)
    target1["form"] = "rect"
    target1["color"] = str(choice(colors))
    target1["size"] = a
    target1["bonus"] = 3
    target1["f"] = 0.5
    target1["v"] = 11
    target1["a"] = 37
    target1["sprite"] = canv.create_rectangle(x-a,y-a,x+a,y+a,fill = target1["color"], width=0)
    #print("creatin rectangl")
    time = int(1000/target1["f"])
    root.after(time,draw_rect)
    targets.append(target1)


def draw_star():
    global root, canv, colors
    target1 = target.copy()
    x = rnd(100,700)
    y = rnd(100,500)
    r = rnd(30,50)
    r1=1/2*r
    n = 5
    a=pi/180*(360/n/2)
    poligonList = []
    for c in range(0,n*2,2):
        x1=cos(a*c)*r+x
        x2=cos(a*(c+1))*r1+x
        y1=sin(a*c)*r+y
        y2=sin(a*(c+1))*r1+y
        poligonList.append((x1,y1))
        poligonList.append((x2,y2))
    target1["form"] = "star"
    target1["color"] = str(choice(colors))
    target1["size"] = r*2
    target1["bonus"] = 7
    target1["f"] = 0.3
    target1["v"] = 8
    target1["a"] = 30
    target1["sprite"] = canv.create_polygon(poligonList,fill = target1["color"], width=0)
    time = int(1000/target1["f"])
    #root.after(time,draw_star)
    targets.append(target1)

    '''
    brushColor('#f9c2c2')
    n = 22
    a=pi/180*(360/n/2)
    poligonList = []
    for c in range(0,n*2,2):
        x1=cos(a*c)*r0+x0
        x2=cos(a*(c+1))*r1+x0
        y1=sin(a*c)*r0+y0
        y2=sin(a*(c+1))*r1+y0
        poligonList.append((x1,y1))
        poligonList.append((x2,y2))
    polygon(poligonList)

    '''





def click(event):
    global counterOchkov , root, label1, canv
    for i in range(len(targets)):        
        pos = canv.coords(targets[i]['sprite'])
        if targets[i]["form"] == "rect":
            a = abs(event.x-(pos[0]+(targets[i]['size'])))
            b = abs(event.y-(pos[1]+(targets[i]['size'])))

        elif targets[i]["form"] == "star":
            for c in range(len(pos)):
                print(str(c) + ')'+str(pos[c]))
            print(len(pos))
            a = abs(event.x-(pos[0]+(targets[i]['size']/2)))
            b = abs(event.y-(pos[1]+(targets[i]['size']/2)))

        else:
            a = abs(event.x-(pos[0]+(targets[i]['size']/2)))
            b = abs(event.y-(pos[1]+(targets[i]['size']/2)))

        r1 = math.sqrt((a**2)+(b**2))
        if r1 <= targets[i]['size']:
            counterOchkov += targets[i]['bonus']
            canv.delete(targets[i]['sprite'])
            del targets[i]
    label1['text'] = counterOchkov
    label1.pack()







main()

Ответы (0 шт):