import "scaling.asy" as scaling; transform mirror = reflect((0,0),(0,1)); pair cross_wsw = (-width*0.5, height*0.35); pair cross_ssw = (-width*0.45, height*0.3); pair cross_ene = (width*0.4, height*0.45); pair cross_nne = (width*0.35, height*0.5); pair cxl = intersectionpoint(cross_wsw--cross_nne, mirror*(cross_ssw--cross_ene)); pair cxb = intersectionpoint(cross_ssw--cross_ene, mirror*(cross_ssw--cross_ene)); pair cxt = intersectionpoint(cross_wsw--cross_nne, mirror*(cross_wsw--cross_nne)); real thread_width = width*0.01; real leg_thread_length = height*0.8; real arm_thread_length = height*0.35; real torso_radius = width*0.08; real torso_top = -height*0.05; real torso_bottom = -height*0.25; path torso = arc((0, torso_top), torso_radius, 0, 180)--arc((0, torso_bottom), torso_radius, 180, 360)--cycle; real head_radius = width*0.12; real head_height = height*0.12; path head = circle((0, head_height), head_radius); real limb_radius = width*0.06; real arm_angle = 80; real arm_length = width*0.12; real leg_angle = 15; real leg_length = width*0.16; pair thigh_start = (-width*0.2, -height*0.4); real thigh_angle = 50; real thigh_length = width*0.13; pair thigh_end = thigh_start + thigh_length*dir(thigh_angle); path thigh = arc(thigh_start, limb_radius, thigh_angle+90, thigh_angle+270)--arc(thigh_end, limb_radius, thigh_angle-90, thigh_angle+90)--cycle; pair shoulder_start = (width*0.15, height*-0.02); real shoulder_angle = 20; real shoulder_length = width*0.08; pair shoulder_end = shoulder_start + shoulder_length*dir(shoulder_angle); path shoulder = arc(shoulder_start, limb_radius, shoulder_angle+90, shoulder_angle+270)--arc(shoulder_end, limb_radius, shoulder_angle-90, shoulder_angle+90)--cycle; pair arm_end = (cross_nne+(0,-arm_thread_length)); pair arm_start = arm_end+(arm_length*dir(arm_angle+180)); path arm = arc(arm_end, limb_radius, arm_angle-90, arm_angle+90)--arc(arm_start, limb_radius, arm_angle+90, arm_angle+270)--cycle; pair leg_end = (cross_ssw+(0,-leg_thread_length)); pair leg_start = leg_end+(leg_length*dir(leg_angle)); pair leg_thread_outer = intersectionpoint(cross_ssw--cross_wsw, (cross_ssw+(-thread_width/2,-10))--(cross_ssw+(-thread_width/2,10))); pair leg_thread_inner = intersectionpoint(cross_ssw--cross_ene, (cross_ssw+(thread_width/2,-10))--(cross_ssw+(thread_width/2,10))); pair leg_thread_leg_outer_connect = intersectionpoint(circle(leg_end, limb_radius), (leg_end+(-thread_width/2,0))--(cross_ssw+(-thread_width/2,0))); pair leg_thread_leg_inner_connect = intersectionpoint(circle(leg_end, limb_radius), (leg_end+(thread_width/2,0))--(cross_ssw+(thread_width/2,0))); pair arm_thread_outer = intersectionpoint(cross_ssw--cross_ene, (cross_nne+(thread_width/2, -50))--(cross_nne+(thread_width/2,0))); pair arm_thread_inner = intersectionpoint(cross_ssw--cross_ene, (cross_nne+(-thread_width/2, -50))--(cross_nne+(-thread_width/2,0))); pair arm_thread_outer_upper_crossover = intersectionpoint(mirror*(cross_wsw--cross_nne), (cross_nne+(thread_width/2, -100))--(cross_nne+(thread_width/2,0))); pair arm_thread_inner_upper_crossover = intersectionpoint(mirror*(cross_wsw--cross_nne), (cross_nne+(-thread_width/2, -100))--(cross_nne+(-thread_width/2,0))); pair arm_thread_outer_lower_crossover = intersectionpoint(mirror*(cross_ssw--cross_ene), (cross_nne+(thread_width/2, -100))--(cross_nne+(thread_width/2,0))); pair arm_thread_inner_lower_crossover = intersectionpoint(mirror*(cross_ssw--cross_ene), (cross_nne+(-thread_width/2, -100))--(cross_nne+(-thread_width/2,0))); pair arm_thread_arm_outer_connect = intersectionpoint(circle(arm_end, limb_radius), (arm_end+(thread_width/2,0))--(cross_nne+(thread_width/2,0))); pair arm_thread_arm_inner_connect = intersectionpoint(circle(arm_end, limb_radius), (arm_end+(-thread_width/2,0))--(cross_nne+(-thread_width/2,0))); path half = mirror*(cross_nne--cross_ene)--mirror*(arm_thread_outer--arm_thread_outer_upper_crossover)--cross_wsw--leg_thread_outer--leg_thread_leg_outer_connect--arc(leg_end, limb_radius, leg_angle+90, leg_angle+270)--arc(leg_start, limb_radius, leg_angle-90, leg_angle+90)--leg_thread_leg_inner_connect--leg_thread_inner--mirror*(arm_thread_outer_lower_crossover--arc(arm_end, arm_thread_arm_outer_connect, arm_end+(limb_radius*dir(arm_angle-90)), CW)--arc(arm_start, limb_radius, arm_angle+270, arm_angle+90, CW)--arc(arm_end, arm_end+(limb_radius*dir(arm_angle+90)), arm_thread_arm_inner_connect, CW)--arm_thread_inner_lower_crossover); path crossover_cutout = (mirror*cxl)--arm_thread_inner--arm_thread_inner_upper_crossover--cycle; path puppet[] = { half--cxb--reverse(mirror*half)--cxt--cycle, crossover_cutout, mirror*crossover_cutout, torso, head, thigh, mirror*thigh, shoulder, mirror*shoulder, };