def convex_wrapping(n=50, data=[]): if not data: data = generate_data(n) fixed = find_right(data) data.remove(fixed) next = smallest_angle([0, 1], fixed, data) lines = [fixed + next] print "FIXED1 {}".format(fixed) print "NEXT1 {}".format(next) while fixed != next: data.append(fixed) vector = vectorize(fixed, next) # print data fixed = next data.remove(fixed) # print "FIXED {}".format( fixed ) next = smallest_angle(vector, fixed, data) # print "NEXT {}".format( next ) lines.append(fixed + next) """ points = generate_data(n) # generate points in plane backup_points = points # backup for return r_point = find_right(points) # find the rightest point #fixed_v = vectorize([0,1], r_point) # starting vector to which will be calculated the angle points.remove(r_point) # remove the r_point from points, but put it back later so it can cycle next = points[0] # get the first point, why not. No need for random edges = [] fixed_v = vectorize([0,1], r_point) free_v = vectorize(next, r_point) _angle = angle(fixed_v, free_v) while next != r_point: for point in points: free_v = vectorize(point, r_point) n_angle = angle(fixed_v, free_v) if _angle > n_angle: next = point _angle = n_angle edges.append(r_point + next) points.append(r_point) r_point = next points.remove( r_point ) """ return data, lines
def convex_wrapping(n=50, data=[]): if not data: data = generate_data(n) fixed = find_right(data) data.remove(fixed) next = smallest_angle([0, 1], fixed, data) lines = [fixed + next] print "FIXED1 {}".format(fixed) print "NEXT1 {}".format(next) while fixed != next: data.append(fixed) vector = vectorize(fixed, next) #print data fixed = next data.remove(fixed) #print "FIXED {}".format( fixed ) next = smallest_angle(vector, fixed, data) #print "NEXT {}".format( next ) lines.append(fixed + next) """ points = generate_data(n) # generate points in plane backup_points = points # backup for return r_point = find_right(points) # find the rightest point #fixed_v = vectorize([0,1], r_point) # starting vector to which will be calculated the angle points.remove(r_point) # remove the r_point from points, but put it back later so it can cycle next = points[0] # get the first point, why not. No need for random edges = [] fixed_v = vectorize([0,1], r_point) free_v = vectorize(next, r_point) _angle = angle(fixed_v, free_v) while next != r_point: for point in points: free_v = vectorize(point, r_point) n_angle = angle(fixed_v, free_v) if _angle > n_angle: next = point _angle = n_angle edges.append(r_point + next) points.append(r_point) r_point = next points.remove( r_point ) """ return data, lines
def triangulation(n, min_side=False, length=100): points = generate_data(n, length, segments=False) segments = join_points(points) if min_side: # If True sorts segments by the length of the side of triangles sort_segments(segments) fin_segments= [segments[0]] crosses = [] segments.pop(0) for seg1 in segments: add = True for seg2 in fin_segments: if cross_point(seg1, seg2)[1] == True: add = False break if add: fin_segments.append(seg1) return points, fin_segments
def triangulation(n, min_side=False, length=100): points = generate_data(n, length, segments=False) segments = join_points(points) if min_side: # If True sorts segments by the length of the side of triangles sort_segments(segments) fin_segments = [segments[0]] crosses = [] segments.pop(0) for seg1 in segments: add = True for seg2 in fin_segments: if cross_point(seg1, seg2)[1] == True: add = False break if add: fin_segments.append(seg1) return points, fin_segments