%% LaTeX2e file `running.mp' %% generated by the `filecontents' environment %% from source `tb86glister' on 2006/06/04. %% torsoLength = 40; upperLegLength = 30; lowerLegLength = 25; footLength = 10; upperArmLength = 25; lowerArmLength = 20; headDiam = 15; def leftHipRange(expr r) = if r<=1: r[225,360] else: (r-1)[360,225] fi enddef; def leftKneeRange(expr r) = if r<=1: if r<=0.5: (2*r)[150,180] else: (2*(r-0.5))[180,330] fi else: if r<=1.5: (2*(r-1))[330,240] else: (2*(r-1.5))[240,150] fi fi enddef; def leftAnkleRange(expr r) = leftKneeRange(r) + 90 enddef; def leftShoulderRange(expr r) = if r<=1: r[210,315] else: (r-1)[315,210] fi enddef; def leftElbowRange(expr r) = leftShoulderRange(r) + 90 enddef; def rightHipRange(expr r) = leftHipRange(if r<=1: r+1 else: r-1 fi) enddef; def rightKneeRange(expr r) = leftKneeRange(if r<=1: r+1 else: r-1 fi) enddef; def rightAnkleRange(expr r) = leftAnkleRange(if r<=1: r+1 else: r-1 fi) enddef; def rightShoulderRange(expr r) = leftShoulderRange(if r<=1: r+1 else: r-1 fi) enddef; def rightElbowRange(expr r) = leftElbowRange(if r<=1: r+1 else: r-1 fi) enddef; def man(expr phase) = pair pelvis; pelvis = (0,0); pair neck; neck = pelvis + torsoLength*dir 75; numeric leftHipAngle; leftHipAngle = leftHipRange(phase / 180); pair leftKnee; leftKnee = pelvis + upperLegLength*dir leftHipAngle; numeric leftKneeAngle; leftKneeAngle = leftKneeRange(phase / 180); pair leftAnkle; leftAnkle = leftKnee + lowerLegLength*dir leftKneeAngle; numeric leftAnkleAngle; leftAnkleAngle = leftAnkleRange(phase / 180); pair leftToes; leftToes = leftAnkle + footLength*dir leftAnkleAngle; numeric leftShoulderAngle; leftShoulderAngle = leftShoulderRange(phase / 180); pair leftElbow; leftElbow = neck + upperArmLength*dir leftShoulderAngle; numeric leftElbowAngle; leftElbowAngle = leftElbowRange(phase / 180); pair leftWrist; leftWrist = leftElbow + lowerArmLength*dir leftElbowAngle; numeric rightHipAngle; rightHipAngle = rightHipRange(phase / 180); pair rightKnee; rightKnee = pelvis + upperLegLength*dir rightHipAngle; numeric rightKneeAngle; rightKneeAngle = rightKneeRange(phase / 180); pair rightAnkle; rightAnkle = rightKnee + lowerLegLength*dir rightKneeAngle; numeric rightAnkleAngle; rightAnkleAngle = rightAnkleRange(phase / 180); pair rightToes; rightToes = rightAnkle + footLength*dir rightAnkleAngle; numeric rightShoulderAngle; rightShoulderAngle = rightShoulderRange(phase / 180); pair rightElbow; rightElbow = neck + upperArmLength*dir rightShoulderAngle; numeric rightElbowAngle; rightElbowAngle = rightElbowRange(phase / 180); pair rightWrist; rightWrist = rightElbow + lowerArmLength*dir rightElbowAngle; draw neck -- pelvis; draw fullcircle shifted (0.5*up) scaled headDiam shifted neck; draw neck -- leftElbow -- leftWrist; draw pelvis -- leftKnee -- leftAnkle -- leftToes; draw neck -- rightElbow -- rightWrist; draw pelvis -- rightKnee -- rightAnkle -- rightToes; drawdot neck + headDiam*up + (upperLegLength+lowerLegLength)*left withcolor white; drawdot neck + headDiam*up + (upperLegLength+lowerLegLength)*right withcolor white; drawdot pelvis + (upperLegLength+lowerLegLength)*down withcolor white; enddef; n = 12; for i := 0 upto n-1: beginfig(i); man(i*180/n); endfig; endfor end.