def create_visual(game, time):
    vectorDict = Gravity.get_vectors()
    momentList = vectorDict[game]
    for d in momentList:
        if max(d.keys()) == time:
            poss = d
    d = {}
    d['time'] = []
    for time, moment in poss.items():
        d['time'].append(time)
        for k, v in moment.items():
            defender, A, B, C = v[0], v[1], v[2], v[3]
            if k not in d:
                d[k] = []
            weightA, weightB, weightC = barycentric_weights(defender, A, B, C)
            if weightA < 0.0:
                x_diff = defender.x - A.x
                y_diff = defender.y - A.y
                A.x += (2*x_diff)
                A.y += (2*y_diff)
                weightA = barycentric_weights(defender, A, B, C)
            
            
            d[k].append(weight[0])
        
    df = pd.DataFrame(d)
    #df.to_csv("poss_test_14.csv")
    #df = df.round(5)
    print(df)
def create_visual(game, time):
    vectorDict = Gravity.get_vectors()
    momentList = vectorDict[game]
    for d in momentList:
        if max(d.keys()) == time:
            poss = d
    lst = []
    for time, moment in poss.items():
        sol = twoPartSolve(moment, playerLabels = True)
        print(sol)
        lst.append([time, sol[2][0], sol[2][1], sol[2][2], sol[2][3], sol[2][4]])
    #print(lst)
    df = pd.DataFrame(lst, columns =['Time', sol[0][0], sol[0][1], sol[0][2], sol[0][3], sol[0][4]]) 
    print(df)
Ejemplo n.º 3
0
def StartGame():
    global objects
    global pairs
    global wind
    global forces
    global RUNNING
    global PAUSED
    global ONETIME
    global TEST
    objects=[]
    forces = []

    rad=const.SPHERE_RADIUS
    #objects.append(Circle(rad, color=const.DARK_GRAY, width= 0, pos=[400,100], velo=[0,0], mass=math.inf))
    firstBall=Circle(rad, color=const.DARK_GRAY, width= 0, pos=[400,100], velo=[0,0], mass=math.inf)
    objects.append(Circle(rad, color=const.ORANGE,  width=0, pos=[400,200], velo=[0,0], mass=const.REALISTIC_MASS))
    objects.append(Circle(rad, color=const.YELLOW, width= 0, pos=[400,300], velo=[0,0], mass=const.REALISTIC_MASS))
    objects.append(Circle(rad, color=const.GREEN, width= 0, pos=[400,400], velo=[0,0], mass=const.REALISTIC_MASS))
    objects.append(Circle(rad, color=const.PINK, width= 0, pos=[400,500], velo=[0,0], mass=const.REALISTIC_MASS))
                                                                               
    forces.append(Gravity(objects=objects.copy(), acc = [0, 9.8* const.MM_TO_PX]))
    wind = AirDrag(windVel=[0,0], objects=objects.copy())
    forces.append(wind)

    pairs =[]
    firstPair=[firstBall,objects[0]]
    pairs.append(firstPair)
    for i in range(len(objects)):
        if(i < len(objects)-1):
            obj1= objects[i]
            obj2= objects[i+1]
            pairs.append([obj1, obj2])

    
   
    forces.append(Chain(k=const.SPRING_FORCE, naturalLen=const.NATURAL_LENGTH, damp=const.DAMPENING, pair=pairs))

    #Add our Infinite mass circle after Forces:
    objects.append(firstBall)
    forces.append(Repulsion(k=const.SPRING_FORCE, objList=objects.copy(), pair=pairs))

    RUNNING=True;
    PAUSED=False;
    GAMEOVER=False;
    READ_FOR_PLAY_AGAIN=False;
    startTime= time.time()
def analyze(gameID):
    vectorDict = Gravity.get_vectors()
    player_gravity = {}
    for game, timeDict in vectorDict.items():
        if game == gameID:
            for d in timeDict:
                tempDict = {}
                for time, moment in d.items():
                    sol = twoPartSolve(moment, playerLabels = True)
                    for i in range(5):
                        if sol[0][i] not in player_gravity:
                            player_gravity[sol[0][i]] = []
                        if sol[0][i] not in tempDict:
                            tempDict[sol[0][i]] = []
                        if -3 < sol[2][i] < 3:
                            tempDict[sol[0][i]].append(sol[2][i])
                for k, v in tempDict.items():
                    if len(v) != 0:
                        player_gravity[k].append(sum(v)/len(v))
    
    for k, v in player_gravity.items():
        print(k, (sum(v)/ len(v)))
def add_column():
    shots = Gravity.get_vectors()[1]
    df = pd.read_csv("data/test_gravity_NN.csv")
    final_list = []
    for row in df.itertuples():
        game = row.game
        time = row.time
        if time in shots[game]:
            lst = list(row[2:])
            temp = [[] for i in range(5)]
            grav_dict = shots[game][time][0]
            for j in range(5):
                for k, v in grav_dict.items():
                    if v[j] != 0:
                        temp[j].extend(v[j])
            avgs = [
                sum(temp[i]) / len(temp[i]) if len(temp[i]) > 0 else 0
                for i in range(5)
            ]
            lst.extend(avgs)
            lst.extend(shots[game][time][1])
            final_list.append(lst)
    #print(final_list)
    ret = pd.DataFrame(final_list,
                       columns=[
                           "game", "time", "shot_number", "value", "result",
                           "probability", "avg_one", "avg_two", "avg_three",
                           "avg_four", "avg_five", "p1", "p2", "p3", "p4", "p5"
                       ])
    pps = ret.value * ret.result
    epps = ret.value * ret.probability
    ret['epps'] = epps
    ret['pps'] = pps
    ret = ret.drop(columns=['result'])
    ret.to_csv("gravity_with_players_changed_zones.csv")
    print(ret)
Ejemplo n.º 6
0
 def Update_Acc(self, QTree, theta, Pot=0):
     self.ax, self.ay, self.az, self.potE = Gravity.TotalAcc(
         self, QTree.root, theta, Pot)
def create_visual(game, time):
    vectorDict = Gravity.get_vectors()[0]
    momentList = vectorDict[game]
    for d in momentList:
        if max(d.keys()) == time:
            poss = d
    d = {}
    d['time'] = []
    d['ball_handler'] = []
    for time, moment in poss.items():
        d['time'].append(time)
        for k, v in moment.items():
            #print("hey there")
            if k not in d:
                d[k] = []
            if len(v) == 4:
                defender, offense, ball, hoop = v[0], v[1], v[2], v[3]
                weightA = barycentric_weights(defender, offense, ball, hoop)
                point = mathutils.geometry.intersect_point_line((offense.x, offense.y), (hoop.x, hoop.y), (ball.x, ball.y))[0]
                point = Coordinate(point[0], point[1])
                if weightA < 0.0:
                    x_diff = defender.x - offense.x
                    y_diff = defender.y - offense.y
                    offense.x += (2*x_diff)
                    offense.y += (2*y_diff)
                    weightA = barycentric_weights(defender, offense, ball, hoop)
                if weightA > 1:
                    weightA = barycentric_weights(offense, defender, ball, hoop)
                ball_multiplier = sigmoid_func(distance(defender, ball))
                hoop_multiplier = sigmoid_func(distance(defender, hoop))
                weightA = float(weightA) * ball_multiplier * hoop_multiplier
                if distance(point, offense) < 3:
                    weightA = d[k][-1][0]
                if weightA > 2.25:
                    weightA = 2.25
                d[k].append([weightA, defender.x, defender.y])
            if len(v) == 5:
                d['ball_handler'].append(k)
                defender, offense, ball, hoop = v[0], v[1], v[2], v[3]
                weight = mathutils.geometry.intersect_point_line((defender.x, defender.y), (hoop.x, hoop.y), (offense.x, offense.y))[1]
                hoop_multiplier = sigmoid_func(distance(defender, hoop))
                weight_new = float(weight) * hoop_multiplier
                d[k].append([weight_new, defender.x, defender.y])
    lst = []
    df = pd.DataFrame(d)
    cols = df.columns
    players = list(cols)
    players.remove('time')
    players.remove('ball_handler')
    players.sort()
    final_cols = ['time']
    final_cols.extend(players)
    df = df.reindex(columns=final_cols)
    
    for row in df.itertuples():
        temp = []
        temp.append(row.time)
        for i in range(2, len(row)):
            temp.extend(row[i])
        lst.append(temp)
    df = pd.DataFrame(lst, columns = ["time", players[0], "p1_x", "p1_y", players[1], "p2_x", "p2_y", players[2], "p3_x", "p3_y", players[3], "p4_x", "p4_y", players[4], "p5_x", "p5_y" ])
    df.to_csv("poss_test_23.csv")
    print(df)
    cols = df.columns
    players = list(cols)
    players.remove('time')
    players.remove('ball_handler')
    players.sort()
    final_cols = ['time']
    final_cols.extend(players)
    df = df.reindex(columns=final_cols)
    
    for row in df.itertuples():
        temp = []
        temp.append(row.time)
        for i in range(2, len(row)):
            temp.extend(row[i])
        lst.append(temp)
    df = pd.DataFrame(lst, columns = ["time", players[0], "p1_x", "p1_y", players[1], "p2_x", "p2_y", players[2], "p3_x", "p3_y", players[3], "p4_x", "p4_y", players[4], "p5_x", "p5_y" ])
    df.to_csv("poss_test_23.csv")
    print(df)

if __name__ == '__main__':
    game = 20150313
    time = 211.8
    #create_visual(game, time)
    #print(sigmoid_func(24))
    vectorDict = Gravity.get_vectors()
    momentList = vectorDict[game]
    for d in momentList:
        if max(d.keys()) == 211.8:
            poss = d
    find_average(poss)
Ejemplo n.º 9
0
import pygame
from circle import Circle
from pygame.math import Vector2  # VECTOR CLASS
from Gravity import *

screenBounds = [600, 600]
screen = pygame.display.set_mode(screenBounds)

fps = 60
deltaTime = 1 / fps
clock = pygame.time.Clock()

objects = []
forces = []
forces.append(Gravity(objects=objects, acc=[0, 980]))

RUNNING = True

#"wat is air density per cubic meter"

while RUNNING:

    for o in objects:
        o.clear_force()

    for f in forces:
        f.apply()
Ejemplo n.º 10
0
    "vxz": 0,
    "vyz": 35020
}
Mars = {
    "xz": 1.486 * 10**11 * 1.666,
    "yz": 0,
    "mass": 6.417e23,
    "vxz": 0,
    "vyz": 24007
}

bodies = [
    gr.Planet(xz=Sun["xz"],
              yz=Sun["yz"],
              Mz=Sun["mass"],
              vxz=Sun["vxz"],
              vyz=Sun["vyz"],
              name="Sun",
              color="yellow"),
    gr.Planet(xz=Earth["xz"],
              yz=Earth["yz"],
              Mz=Earth["mass"],
              vxz=Earth["vxz"],
              vyz=Earth["vyz"],
              name="Earth",
              color="blue"),
    gr.Planet(xz=Mercury["xz"],
              yz=Mercury["yz"],
              Mz=Mercury["mass"],
              vxz=Mercury["vxz"],
              vyz=Mercury["vyz"],
def filter_possession():
    vectorDict = Gravity.get_vectors()
Ejemplo n.º 12
0
import Gravity as gr
import matplotlib.pyplot as plt

dt = (60 * 60 * 24) / 10
t = 60 * 60 * 24 * 365.242
p1 = gr.Gravity(1.989 * 10**30, 5.9742 * 10**24, 6.67408 * 10**(-11), 0, 0,
                1.486 * 10**11, 0, 0, 0, 0, 29783, dt, t)
lista1, lista2, lista3, lista4 = p1.Eulerova_metoda()
plt.style.use("dark_background")
plt.plot(lista1, lista2, "gold", linewidth=4, label="Sun")
plt.plot(lista3, lista4, "b", label="Earth")
plt.legend(loc='best')
plt.title("x-y graf")
plt.show()