Example #1
0
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
Example #2
0
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
Example #3
0
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