Example #1
0
def triangulateRandom(n, uniform=True):

    if uniform:
        points = np.random.uniform(0,500,[n,2])
        draw   = Turtle("triangulation_uniform_points")
    else:
        mean, sigma = 200, 70
        points = np.random.normal(mean,sigma,[n,2])
        draw   = Turtle("triangulation_normal_points")

    for edge in triangulation(points):
        draw.addLineNumpy(edge.array[0,:], edge.array[1,:])
    draw.dumpImage()
def triangulateRandom(n, uniform=True):

    if uniform:
        points = np.random.uniform(0, 500, [n, 2])
        draw = Turtle("triangulation_uniform_points")
    else:
        mean, sigma = 200, 70
        points = np.random.normal(mean, sigma, [n, 2])
        draw = Turtle("triangulation_normal_points")

    for edge in triangulation(points):
        draw.addLineNumpy(edge.array[0, :], edge.array[1, :])
    draw.dumpImage()
Example #3
0
class Polygon():
    def __init__(self, vertices):

        self.n = len(vertices)
        self.vert = [np.array(vortex) for vortex in vertices]
        self.edges = [
            self.vert[(i + 1) % self.n] - self.vert[i] for i in xrange(self.n)
        ]

    # Calculation using Ray casting method. Ray in direction of S-P.
    def testIn(self, P):

        S = np.array((-1 * pi, -1))
        P = np.array(P)
        n_intersections = 0

        for vertex in self.vert:
            if (vertex == P).all():
                return True

        PS = S - P
        for i in xrange(self.n):
            A = self.vert[i]
            B = self.vert[(i + 1) % self.n]

            PA = A - P
            PB = B - P

            det_PS_PA = np.linalg.det(np.column_stack((PS, PA)))
            det_PS_PB = np.linalg.det(np.column_stack((PS, PB)))
            det_PB_PA = np.linalg.det(np.column_stack((PB, PA)))

            # Compare vectors orientation
            if 0 >= det_PS_PA * det_PS_PB and \
               0 <  det_PS_PA * det_PB_PA:
                n_intersections += 1
        return bool(n_intersections % 2)

    def drawPolygon(self):

        self.draw = Turtle("Polygon")

        for i in xrange(self.n):
            self.draw.addLineNumpy(self.vert[i], self.vert[(i + 1) % self.n])
def wrapRandomGift(n, uniform=True):

    if uniform:
        draw   = Turtle("Gift_Wrapping_uniform")
        points = list(np.random.uniform(0,500,[n,2]))
    else:
        draw   = Turtle("Gift_Wrapping_normal")
        mean, sigma = 200, 70
        points = list(np.random.normal(mean,sigma,[n,2]))

    for point in points:
        draw.addPoint(point)

    while len(points) >= 3:
        wraping = wrapGift(points)
        wr_len  = len(wraping)
        for i in xrange(wr_len):
            draw.addLineNumpy(wraping[i], wraping[(i+1) % wr_len])

    draw.dumpImage()
Example #5
0
class Polygon:
    def __init__(self, vertices):

        self.n = len(vertices)
        self.vert = [np.array(vortex) for vortex in vertices]
        self.edges = [self.vert[(i + 1) % self.n] - self.vert[i] for i in xrange(self.n)]

    # Calculation using Ray casting method. Ray in direction of S-P.
    def testIn(self, P):

        S = np.array((-1 * pi, -1))
        P = np.array(P)
        n_intersections = 0

        for vertex in self.vert:
            if (vertex == P).all():
                return True

        PS = S - P
        for i in xrange(self.n):
            A = self.vert[i]
            B = self.vert[(i + 1) % self.n]

            PA = A - P
            PB = B - P

            det_PS_PA = np.linalg.det(np.column_stack((PS, PA)))
            det_PS_PB = np.linalg.det(np.column_stack((PS, PB)))
            det_PB_PA = np.linalg.det(np.column_stack((PB, PA)))

            # Compare vectors orientation
            if 0 >= det_PS_PA * det_PS_PB and 0 < det_PS_PA * det_PB_PA:
                n_intersections += 1
        return bool(n_intersections % 2)

    def drawPolygon(self):

        self.draw = Turtle("Polygon")

        for i in xrange(self.n):
            self.draw.addLineNumpy(self.vert[i], self.vert[(i + 1) % self.n])
Example #6
0
def randomSegments(n, l=150):

    points = np.random.uniform(0, 300, [n, 2])
    vector = np.array([[l, 0]])
    pairs = []
    for i in xrange(n):
        A = points[i, :]
        while True:
            B = A + randomVector(l)
            if B[0, 0] >= 0 and B[0, 1] >= 0:  # is it within first quadrant?
                pairs.append(np.row_stack((A, B)))
                break
    return pairs


if __name__ == '__main__':

    draw = Turtle("Intersection")
    segments = randomSegments(15)

    for i, seg1 in enumerate(segments):
        for seg2 in segments[i + 1:]:
            intersect = segmentIntersect(seg1, seg2)
            if intersect != None:
                draw.addPoint(intersect)

    for seg in segments:
        draw.addLineNumpy(seg[0], seg[1])

    draw.dumpImage()
Example #7
0
def randomSegments(n, l=150):

    points = np.random.uniform(0,300,[n,2])
    vector = np.array([[l, 0]])
    pairs  = []
    for i in xrange(n):
        A = points[i,:]
        while True:
            B = A + randomVector(l)
            if B[0,0] >= 0 and B[0,1] >= 0: # is it within first quadrant?
                pairs.append(np.row_stack((A, B)))
                break
    return pairs


if __name__ == '__main__':
    
    draw = Turtle("Intersection")
    segments = randomSegments(15)

    for i, seg1 in enumerate(segments):
        for seg2 in segments[i+1:]:
            intersect = segmentIntersect(seg1, seg2)
            if intersect != None:
                draw.addPoint(intersect)

    for seg in segments:
        draw.addLineNumpy(seg[0], seg[1])

    draw.dumpImage()