def create_triangle(p1=(0, 0), p2=(1, 0), p3=(.5, .866), x=0, y=0, m=1, scalar=1, bt=Body.DYNAMIC): ''' given points (p1..p3), mass (m), x-position (x), y-position (y), scalar <to augment default equilateral triangle>, body_type (bt), The default values for p1,p2,p3 make an approx. equilateral triangle. return (body, shape) tuple for a triangle ''' vertices = (p1, p2, p3) # equilateral vertices = tuple((v[0] * scalar, v[1] * scalar) for v in vertices) shape = Poly(body=None, vertices=vertices) # will set body later vertices = shape.get_vertices() # because Vec2d of vertices is needed moment = moment_for_poly(mass=m, vertices=vertices) body = Body(mass=m, moment=moment) body.position = (x, y) shape.body = body # set body here because init None above return body, shape
def create_pentagon(p1=(0, 0), p2=(2, 0), p3=(3, 2), p4=(1, 4), p5=(-1, 2), x=0, y=0, m=1, scalar=1, bt=Body.DYNAMIC): ''' given points (p1..p5), mass (m), x-position (x), y-position (y), scalar <to augment default points>, body_type (bt), return (body, shape) tuple for a pentagon ''' vertices = (p1, p2, p3, p4, p5) vertices = tuple((v[0] * scalar, v[1] * scalar) for v in vertices) shape = Poly(body=None, vertices=vertices) # will set body later vertices = shape.get_vertices() # because Vec2d of vertices is needed moment = moment_for_poly(mass=m, vertices=vertices) body = Body(mass=m, moment=moment) body.position = (x, y) shape.body = body # set body here because init None above return body, shape