Parameterized Arms Example Code


(define (arm-base)
 (separator
  (scale (vec3 .75 .075 .75))
  (box)
  )
 )

(define (base-to-bottom-segment-translation)
 (translate (vec3 0 0 0))
 )

(define (bottom-segment)
 (separator
  (scale (vec3 .1 1 .1))
  (rotate -90 (vec3 1 0 0))
  (cylinder)
  )
 )

(define (bottom-segment-to-elbow-translation)
 (translate (vec3 0 1 0))
 )

(define (elbow-rotation bend turn)
 (rotate turn (vec3 0 1 0))
 (rotate bend (vec3 0 0 1))
 )

(define (elbow)
 (separator
  (scale (vec3 .1 .1 .1))
  (sphere)
  ))

(define (elbow-to-upper-segment-translation)
 (translate (vec3 0 0 0))
 )

(define (upper-segment)
 (separator
  (scale (vec3 .075 1 .075))
  (rotate -90 (vec3 1 0 0))
  (cylinder)
  )
 )

(define (upper-segment-to-wrist-translation)
 (translate (vec3 0 1 0))
 )

(define (wrist-rotation bend)
 (rotate bend (vec3 0 0 1))
 )

(define (wrist)
 (separator
  (scale (vec3 .075 .075 .075))
  (sphere)
  ))

(define (wrist-to-hand-translation)
 (translate (vec3 0 0 0))
 )

(define (hand)
 (separator
  (scale (vec3 .075 1 .075))
  (rotate -90 (vec3 1 0 0))
  (cone)
  )
 )

(define (robot-arm bend turn)
  (separator
    (surface "matte")
    (arm-base)
    (base-to-bottom-segment-translation)
    (bottom-segment)
    (bottom-segment-to-elbow-translation)
    (elbow-rotation bend turn)
    (elbow)
    (elbow-to-upper-segment-translation)
    (upper-segment)
    (upper-segment-to-wrist-translation)
    (wrist-rotation bend)
    (wrist)
    (wrist-to-hand-translation)
    (hand)
    ))

(define (arms)
 (define i 0)
 (while (< i 10)
  (begin
   (define j 0)
   (while (< j 10)
    (separator
     (translate (vec3 (- (* i 2) 10) 0 (- (* j 2) 10)))
     (robot-arm (+ (* (rand) 180) -90) (* (rand) 360))
     (set! j (+ j 1))
     )
    )
   (set! i (+ i 1))
   )))


Return to Iteration
mrl