Exemplo n.º 1
0
def rect_from_line(line):
    """ Creates a rectangle from a line primitive by thickening it 
        according to the primitive's aperture size.

        Treats rectangular apertures as square because otherwise the maths
        becomes too hard for my brain.
    """
    r = get_aperture_size(line.aperture) / 2.0

    start_v = V.from_tuple(line.start)
    end_v = V.from_tuple(line.end)

    dir_v = end_v - start_v
    # normalize direction vector
    abs_dir_v = abs(dir_v)
    if abs_dir_v:
        dir_v = dir_v / abs_dir_v
    else:
        dir_v = V(0, 0)

    # 45 degree angle means the vector pointing to the new rectangle edges has to be sqrt(2)*r long
    v_len = math.sqrt(2)*r

    # Give the direction vector the appropriate length
    dir_v *= v_len

    v1 = (start_v + dir_v.rotate(135, as_degrees=True)).as_tuple()
    v2 = (start_v + dir_v.rotate(-135, as_degrees=True)).as_tuple()
    v3 = (end_v + dir_v.rotate(-45, as_degrees=True)).as_tuple()
    v4 = (end_v + dir_v.rotate(45, as_degrees=True)).as_tuple()

    return [v1, v2, v3, v4]
Exemplo n.º 2
0
def rect_from_line(line):
    """ Creates a rectangle from a line primitive by thickening it 
        according to the primitive's aperture size.

        Treats rectangular apertures as square because otherwise the maths
        becomes too hard for my brain.
    """
    r = get_aperture_size(line.aperture) / 2.0

    start_v = V.from_tuple(line.start)
    end_v = V.from_tuple(line.end)

    dir_v = end_v - start_v
    # normalize direction vector
    abs_dir_v = abs(dir_v)
    if abs_dir_v:
        dir_v = dir_v / abs_dir_v
    else:
        dir_v = V(0, 0)

    # 45 degree angle means the vector pointing to the new rectangle edges has to be sqrt(2)*r long
    v_len = math.sqrt(2)*r

    # Give the direction vector the appropriate length
    dir_v *= v_len

    v1 = (start_v + dir_v.rotate(135, as_degrees=True)).as_tuple()
    v2 = (start_v + dir_v.rotate(-135, as_degrees=True)).as_tuple()
    v3 = (end_v + dir_v.rotate(-45, as_degrees=True)).as_tuple()
    v4 = (end_v + dir_v.rotate(45, as_degrees=True)).as_tuple()

    return [v1, v2, v3, v4]
Exemplo n.º 3
0
 def goal_coordinate(self):
     """Randomly choose the goal in the field so that the distance from the
     current coordinate follows Pareto distribution."""
     length = pareto(self.scale, self.shape)
     theta = random.uniform(0, 2 * math.pi)
     goal = self.current + length * V(math.cos(theta), math.sin(theta))
     # FIXME: the goal coordinate is simply limited by the field boundaries.
     # A node should *bounce back* with the boundaries.
     x = max(0, min(goal[0], self.width))
     y = max(0, min(goal[1], self.height))
     return V(x, y)
Exemplo n.º 4
0
 def setGravityDirection(self, stringDirection):
     """
     A direction is set through direction naming: X, Y, Z
     """
     if stringDirection.lower() == "x":
         self.gravityDirection = V(-1, 0, 0)
         pass
     if stringDirection.lower() == "y":
         self.gravityDirection = V(0, -1, 0)
         pass
     if stringDirection.lower() == "z":
         self.gravityDirection = V(0, 0, -1)
         pass
     return self.gravityDirection
Exemplo n.º 5
0
def quiz10():
    v1 = V([-7.579, -7.88])
    w1 = V([22.737, 23.64])

    v2 = V([-2.029, 9.97, 4.172])
    w2 = V([-9.231, -6.639, -7.245])

    v3 = V([-2.328, -7.284, -1.214])
    w3 = V([-1.821, 1.072, -2.94])

    v4 = V([2.118, 4.827])
    w4 = V([0, 0])

    if v1.is_orthogonal(w1):
        print("v1 is orthogonal with w1")
    if v1.is_parallel(w1):
        print("v1 is parallel with w1")

    if v2.is_orthogonal(w2):
        print("v2 is orthogonal with w2")
    if v2.is_parallel(w2):
        print("v2 is parallel with w2")

    if v3.is_orthogonal(w3):
        print("v3 is orthogonal with w3")
    if v3.is_parallel(w3):
        print("v3 is parallel with w3")

    if v4.is_orthogonal(w4):
        print("v4 is orthogonal with w4")
    if v4.is_parallel(w4):
        print("v4 is parallel with w4")
Exemplo n.º 6
0
def mesh_from_obj(filename):
    vertices = []
    texcoords = []
    normals = []
    indices = []
    materials = []
    ignore = False
    current_mtl = None
    for line in open(filename):
        line = line.strip('\r\n')
        if '#' in line:
            line = line[:line.index("#")]
        if not line: continue
        line = line.split(' ')
        if line[0] == "o":
            if line[1].startswith('background_') or line[1].startswith(
                    'marker_'):
                ignore = True
            else:
                ignore = False
        elif line[0] == "v":
            vertices.append(V(float(x) for x in line[1:]))
        elif line[0] == "vt":
            texcoords.append(V(float(x) for x in line[1:]))
        elif line[0] == "vn":
            normals.append(V(float(x) for x in line[1:]))
        elif line[0] == "mtllib":
            mtllib = parse_mtl(
                os.path.join(os.path.dirname(os.path.abspath(filename)),
                             line[1]))
        elif line[0] == 'usemtl':
            current_mtl = line[1]
        elif line[0] == "f":
            if not ignore:
                indices.append(
                    tuple(
                        tuple(
                            int(y) - 1 if y else None
                            for y in (x.split('/') + ['', ''])[:3])
                        for x in line[1:]))
                materials.append(mtllib[current_mtl])
        else:
            print line
    return Mesh(vertices, texcoords, normals, indices, materials)
Exemplo n.º 7
0
def mesh_from_obj(file):
    vertices = []
    texcoords = []
    normals = []
    indices = []
    for line in file:
        line = line.strip()
        if '#' in line:
            line = line[:line.index("#")]
        if not line: continue
        line = line.split(' ')
        if line[0] == "v":
            vertices.append(V(float(x) for x in line[1:]))
        if line[0] == "vt":
            texcoords.append(V(float(x) for x in line[1:]))
        if line[0] == "vn":
            normals.append(V(float(x) for x in line[1:]))
        elif line[0] == "f":
            indices.append(
                tuple(
                    tuple(int(y) - 1 if y else None for y in x.split('/'))
                    for x in line[1:]))
    return Mesh(vertices, texcoords, normals, indices)
Exemplo n.º 8
0
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # create a grid topology
        g = graphtools.Graph(directed=False)
        self.graph = g
        g.create_graph('lattice', 2, self.size)

        # save the positions of vertices as Vector object
        for j in range(1, self.size + 1):
            for i in range(1, self.size + 1):
                v = g._lattice_vertex(2, self.size, i, j)
                x, y = ((0.5 + i - 1) / self.size * self.width,
                        (0.5 + j - 1) / self.size * self.height)
                g.set_vertex_attribute(v, 'xy', V(x, y))
        self.compute_edge_lengths()
Exemplo n.º 9
0
    def __init__(self, size=5, *args, **kwargs):
        self.size = size
        super().__init__(*args, **kwargs)

        # create a linear topology
        g = graphtools.Graph(directed=False)
        self.graph = g
        g.create_graph('lattice', 1, self.size)

        # save the positions of vertices as Vector object
        for v in range(1, self.size + 1):
            x, y = ((v - 0.5) / self.size * self.width, 0.5 * self.height)
            g.set_vertex_attribute(v, 'xy', V(x, y))

        self.compute_edge_lengths()
Exemplo n.º 10
0
    def __init__(self, npoints=100, *args, **kwargs):
        self.npoints = npoints
        super().__init__(*args, **kwargs)

        # create a Voronoi topology
        g = graphtools.Graph(directed=False)
        self.graph = g
        g.create_graph('voronoi', self.npoints, self.width, self.height)

        # save the positions of vertices as Vector object
        for v in g.vertices():
            x, y = g.get_vertex_attribute(v, 'pos').split(',')
            x, y = float(x), float(y)
            g.set_vertex_attribute(v, 'xy', V(x, y))

        self.compute_edge_lengths()
Exemplo n.º 11
0
def quiz8():
    v1 = V([7.887, 4.138])
    w1 = V([-8.802, 6.776])

    v2 = V([3.183, -7.627])
    w2 = V([-2.668, 5.319])

    v3 = V([-5.955, -4.904, -1.874])
    w3 = V([-4.496, -8.755, 7.103])

    v4 = V([7.35, 0.221, 5.188])
    w4 = V([2.751, 8.259, 3.985])

    print(v1.dot_product(w1))
    print(v2.angle_with(w2))

    print(v3.dot_product(w3))
    print(v4.angle_with(w4, True))
Exemplo n.º 12
0
def quiz14():
    try:
        v1 = V([8.462, 7.893, -8.187])
        b1 = V([6.984, -5.975, 4.778])

        v2 = V([-8.987, -9.838, 5.031])
        b2 = V([-4.268, -1.861, -8.866])

        v3 = V([1.5, 9.547, 3.691])
        b3 = V([-6.007, 0.124, 5.772])

        print("Cross prod of v1 and b1:")
        print(v1.cross_product_with(b1))

        print("area of paralelogram:")
        print(v2.area_of_paralelogram_with(b2))

        print("area of triangle:")
        print(v3.area_of_triangle_with(b3))
    except Exception as e:
        print(e)
Exemplo n.º 13
0
def quiz12():
    v1 = V([3.039, 1.879])
    b1 = V([0.825, 2.036])

    v2 = V([-9.88, -3.264, -8.159])
    b2 = V([-2.155, -9.353, -9.473])

    v3 = V([3.009, -6.172, 3.692, -2.51])
    b3 = V([6.404, -9.144, 2.759, 8.718])

    print("Proj_b1 of v1 aka v1 parralel component:")
    print(v1.component_parallel_to(b1))

    print("v2 orthogonal component:")
    print(v2.component_orthogonal_to(b2))

    proj_b_v3 = v3.component_parallel_to(b3)
    print("v3 parallel component")
    print(proj_b_v3)

    orthogonal_v3 = v3.component_orthogonal_to(b3)
    print("v3 orthogonal component:")
    print(orthogonal_v3)
Exemplo n.º 14
0
 def random_coordinate(self):
     """Pick a random coordinate on the field."""
     return V(random.uniform(0, self.width), random.uniform(0, self.height))
Exemplo n.º 15
0
def rotate_vec(vec, m):
    x = numpy.dot((vec[0], vec[1], vec[2], 1), m)
    return V(x[:3]) / x[3]
Exemplo n.º 16
0
 def random_coordinate(self):
     """Pick a random coordinate on the field."""
     x = random.uniform(self.xmin, self.xmax)
     y = random.uniform(self.ymin, self.ymax)
     return V(x, y)
Exemplo n.º 17
0
 def coordinate_for(self, n):
     """Return the coordinate of N-th agent.  Agents are placed such that
     any pair of agents are not reachable."""
     return V(n * NODE_SEPERATION, self.height / 2)
Exemplo n.º 18
0
 def update_velocity(self):
     """Update agent's velocity using the velocity function."""
     vel = self.vel_func()
     theta = random.uniform(0, 2 * math.pi)
     self.velocity = vel * V(math.cos(theta), math.sin(theta))
     self.wait = False
Exemplo n.º 19
0
    def draw(self):
        t = time.time()
        pos = V(numpy.linalg.inv(glGetFloatv(GL_MODELVIEW_MATRIX))[3, 0:3])

        glClearColor(0, 0, 1, 1)
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

        glEnable(GL_LIGHTING)
        glEnable(GL_LIGHT0)
        glEnable(GL_COLOR_MATERIAL)
        glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, [0, 0, 0, 1])
        glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, [0, 0, 0, 1])
        glLightfv(GL_LIGHT0, GL_POSITION,
                  [math.sin(t / 5) * 100,
                   math.cos(t / 5) * 100, 100, 1])
        glLightfv(GL_LIGHT0, GL_AMBIENT, [0, 0, 0, 1])
        glLightfv(GL_LIGHT0, GL_DIFFUSE, [.5, .5, .5, 1])
        glLightfv(GL_LIGHT0, GL_SPECULAR, [.5, .5, .5, 1])
        glLightModelfv(GL_LIGHT_MODEL_AMBIENT, [.5, .5, .5])

        glEnable(GL_DEPTH_TEST)
        glEnable(GL_CULL_FACE)

        for obj in self.objs:
            obj.draw()
        '''
        q = gluNewQuadric()
        for i in xrange(100):
            with GLMatrix:
                glColor3d(random.random(), random.random(), random.random())
                glTranslate(*pos+5*V(random.gauss(0, 1) for i in xrange(3)))
                gluSphere(q, .5, 10, 5)
        '''
        # sun
        with GLMatrix:
            glTranslate(math.sin(t / 5) * 100, math.cos(t / 5) * 100, 100)
            q = gluNewQuadric()
            glDisable(GL_LIGHTING)
            glColor3f(1, 1, 1)
            gluSphere(q, 10, 20, 20)
            glEnable(GL_LIGHTING)

        # water
        glDisable(GL_LIGHTING)

        glEnable(GL_BLEND)
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

        if pos[2] > 0:
            glBegin(GL_TRIANGLE_FAN)
            glNormal3f(0, 0, 1)
            glColor4f(0, 0, 0.5, 0.5)
            glVertex4f(pos[0], pos[1], min(0, pos[2] - 0.2), 1)
            glVertex4f(-1, -1, 0, 0)
            glVertex4f(+1, -1, 0, 0)
            glVertex4f(+1, +1, 0, 0)
            glVertex4f(-1, +1, 0, 0)
            glVertex4f(-1, -1, 0, 0)
            glEnd()
        else:
            glBegin(GL_TRIANGLE_FAN)
            glNormal3f(0, 0, -1)
            glColor4f(0, 0, 0.5, 0.5)
            glVertex4f(pos[0], pos[1], max(0, pos[2] + 0.2), 1)
            glVertex4f(-1, -1, 0, 0)
            glVertex4f(-1, +1, 0, 0)
            glVertex4f(+1, +1, 0, 0)
            glVertex4f(+1, -1, 0, 0)
            glVertex4f(-1, -1, 0, 0)
            glEnd()

        glDisable(GL_BLEND)

        glEnable(GL_LIGHTING)

        # underwater color
        if pos[2] < 0:
            glPushMatrix()
            glLoadIdentity()

            glMatrixMode(GL_PROJECTION)
            glPushMatrix()
            glLoadIdentity()
            glMatrixMode(GL_MODELVIEW)

            glDisable(GL_LIGHTING)
            glDisable(GL_DEPTH_TEST)

            glEnable(GL_BLEND)
            glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
            glBegin(GL_QUADS)
            glColor4f(0, 0, 1, 0.1)
            glVertex3f(-1, -1, 0)
            glVertex3f(+1, -1, 0)
            glVertex3f(+1, +1, 0)
            glVertex3f(-1, +1, 0)
            glEnd()
            glDisable(GL_BLEND)

            glEnable(GL_DEPTH_TEST)
            glEnable(GL_LIGHTING)

            glMatrixMode(GL_PROJECTION)
            glPopMatrix()
            glMatrixMode(GL_MODELVIEW)

            glPopMatrix()