[Fluxus] ellipse (circle, really) primitive
    evan.raskob [lists] 
    lists at lowfrequency.org
       
    Wed Feb  4 10:58:06 PST 2009
    
    
  
hey y'all
Giving back to the list - I wrote some code to generate circles  
(working on ellipses next).  Here it is in progress... will post a  
better version later when I adapt it to ellipses.  For now, I learned  
quite a bit about creating primitives.  It could use some texture  
data as well, but what the heck... I'm still new to scheme.  In fact,  
I spent way too much time thinking of how to build the vertices list  
recursively (or functionally) using some elegant scheme but in the  
end wound up doing it the way I would do it in Java or C++.  Good  
that scheme is flexible.
Cheers
Evan
;----- return a vector on a circle based on index
(define (calc-xyz index max-index r)
     (let*
         ( [angle (* 6.28312 (/ index (- max-index 1)))]
           [x (* (cos angle) r)]
           [y (* (sin angle) r)] )
         ;(display (vector x y 0))(newline)
         (vector x y 0))
     )
(define (build-ellipse rmin rmaj num-verts)
     (define p (build-polygons (* 3 num-verts) 'triangle-list))
     (with-primitive p
          (for ([i (in-range 0 (* 3 num-verts) 3) ])
                      (pdata-set! "p" i (vector 0 0 0))
                      (pdata-set! "n" i (vector 0 0 -1))
                      (pdata-set! "p" (+ i 1) (calc-xyz (/ i 3) num- 
verts rmin))
                      (pdata-set! "n" (+ i 1) (vector 0 0 -1))
                      (pdata-set! "p" (+ i 2) (calc-xyz (+ (/ i 3) 1)  
num-verts rmin))
                      (pdata-set! "n" (+ i 2) (vector 0 0 -1)))
      	 (poly-convert-to-indexed)
      )
  p)
;---- this is handy for printing out all vertices
(define (show-pdata prm)
     (with-primitive prm
         (for ([i (in-range (pdata-size))])
                 (display (pdata-ref "p" i))(newline))
     )
)
; (pdata-set! Name vertnumber vector) 
    
    
More information about the Fluxus
mailing list