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)
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
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()
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])
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))
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
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)
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)
def set_acceleration(self, acc): self.acceleration = vec2(acc[0], acc[1])
def set_velocity(self, vel): self.velocity = vec2(vel[0], vel[1])
def set_position(self, pos): self.position = vec2(pos[0], pos[1])
def apply_acceleration(self, deltaTime): self.velocity += self.acceleration * deltaTime self.acceleration = vec2(0, 0) self.position += self.velocity * deltaTime