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()
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()
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 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()
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()