예제 #1
0
 def __init__(self, radius, colour, name, position=[0, 0]):
     self.name = name
     self.radius = radius
     self.colour = colour
     self.position = vec2(position[0], position[1])
     self.velocity = vec2(0, 0)
     self.acceleration = vec2(0, 0)
예제 #2
0
    def __init__(self, colour, thikness, pos, scale=10000):
        self.colour = colour
        self.thickness = thikness
        self.pos = vec2(pos[0], pos[1])
        self.scale = scale
        self.magnitude = self.pos.magnitude()

        self.vert1 = vec2(0, 0)
        self.vert2 = self.pos
예제 #3
0
def demo2d():
    b1 = phyber_engine_2D.p_Ball_2D(60, 30)
    b1.set_position(vec2(100, 20))
    b1.set_velocity(vec2(0.00003, 0.00002))

    b2 = phyber_engine_2D.p_Ball_2D(30, 15)
    b2.set_position(vec2(400, 60))
    b2.set_velocity(vec2(-0.00005, 0))

    b3 = phyber_engine_2D.p_Ball_2D(20, 10)
    b3.set_position(vec2(250, 200))

    phyber = phyber_engine_2D.Phyber_2D([b1, b2, b3], [True, True, False])
    sim = Renderer_2D_runtime(phyber, 250, (600, 400), 30)
    sim.init()
예제 #4
0
 def calc_linear_momentum(self):
     linMomTot = [0, 0]
     for i in range(len(self.bodies)):
         pos = self.bodies[i].velocity * self.bodies[i].mass
         assert isinstance(pos, vec2)
         self.linearMomentum[i + 1].pos = pos
         linMomTot[0] += self.linearMomentum[i + 1].pos[0]
         linMomTot[1] += self.linearMomentum[i + 1].pos[1]
         self.linearMomentum[i + 1].scale_line()
         self.linearMomentum[i + 1].translate(self.bodies[i].position)
     self.linearMomentum[0].set_pos(vec2(linMomTot[0], linMomTot[1]))
     self.linearMomentum[0].scale_line()
     if self.showData[0]:
         self.linearMomentum[0].translate(self.massCenter.position)
     else:
         self.linearMomentum[0].translate([100, 100])
예제 #5
0
    def calc_mass_center(self, deltaTime):
        if (deltaTime == 0):
            deltaTime = 0.00001
        totMass = 0
        posSum = [0, 0]
        for b in self.bodies:
            posSum[0] += b.position[0] * b.mass
            posSum[1] += b.position[1] * b.mass
            totMass += b.mass
        oldPos = self.massCenter.position
        self.massCenter.set_position(
            (posSum[0] / totMass, posSum[1] / totMass))

        oldVel = self.massCenter.velocity
        self.massCenter.set_velocity(
            vec2((self.massCenter.position[0] - oldPos[0]) / deltaTime,
                 (self.massCenter.position[1] - oldPos[1]) / deltaTime))

        self.massCenter.set_acceleration(
            ((self.massCenter.velocity[0] - oldVel[0]) / deltaTime,
             (self.massCenter.velocity[1] - oldVel[1]) / deltaTime))
예제 #6
0
 def translate(self, trans):
     t = vec2(trans[0], trans[1])
     self.vert1 += t
     self.vert2 += t  #p_math_2D.vec_add(self.pos, trans)
     pass
예제 #7
0
 def scale_line(self):
     self.vert1 = vec2(0, 0)
     v = self.pos * self.scale
     assert isinstance(v, vec2)
     self.vert2 = v
     assert isinstance(self.vert2, vec2)
예제 #8
0
 def __init__(self, mass, radius):
     self.mass = mass
     self.radius = radius
     self.acceleration = vec2(0, 0)
     self.velocity = vec2(0, 0)
     self.position = vec2(0, 0)
예제 #9
0
 def set_acceleration(self, acc):
     self.acceleration = vec2(acc[0], acc[1])
예제 #10
0
 def set_velocity(self, vel):
     self.velocity = vec2(vel[0], vel[1])
예제 #11
0
 def set_position(self, pos):
     self.position = vec2(pos[0], pos[1])
예제 #12
0
    def apply_acceleration(self, deltaTime):
        self.velocity += self.acceleration * deltaTime

        self.acceleration = vec2(0, 0)

        self.position += self.velocity * deltaTime