Polyhedra
More fun with Fluxus - I've been learning how to use (build-polygons), where you define the vertices that make up the faces (and the normals to the faces which control lighting). I had a heck of a time getting the tetrahedron working, I found that (recalc-normals) didn't work in a way that was suitable. The function (hint-normal) shows the normals as red lines, so you can check they are pointing in the right directions, very helpful. Once I got used to it, making an octahedron was much easier.
(define (pow a b) (exp (* (log a) b))) (define (build-octahedron) (let ((ob (build-polygons 24 2)) (L (pow (/ 1 3) (/ 1 3)) ) (-L (- 0 (pow (/ 1 3) (/ 1 3)))) ) (grab ob) (pdata-set "p" 0 (vector 1 0 0)) (pdata-set "p" 1 (vector 0 1 0)) (pdata-set "p" 2 (vector 0 0 1)) (pdata-set "p" 3 (vector 1 0 0)) (pdata-set "p" 4 (vector 0 0 1)) (pdata-set "p" 5 (vector 0 -1 0)) (pdata-set "p" 6 (vector 1 0 0)) (pdata-set "p" 7 (vector 0 -1 0)) (pdata-set "p" 8 (vector 0 0 -1)) (pdata-set "p" 9 (vector 1 0 0)) (pdata-set "p" 10 (vector 0 0 -1)) (pdata-set "p" 11 (vector 0 1 0)) (pdata-set "p" 12 (vector -1 0 0)) (pdata-set "p" 13 (vector 0 0 1)) (pdata-set "p" 14 (vector 0 1 0)) (pdata-set "p" 15 (vector -1 0 0)) (pdata-set "p" 16 (vector 0 -1 0)) (pdata-set "p" 17 (vector 0 0 1)) (pdata-set "p" 18 (vector -1 0 0)) (pdata-set "p" 19 (vector 0 0 -1)) (pdata-set "p" 20 (vector 0 -1 0)) (pdata-set "p" 21 (vector -1 0 0)) (pdata-set "p" 22 (vector 0 1 0)) (pdata-set "p" 23 (vector 0 0 -1)) (pdata-set "n" 0 (vector L L L)) (pdata-set "n" 1 (vector L L L)) (pdata-set "n" 2 (vector L L L)) (pdata-set "n" 3 (vector L -L L)) (pdata-set "n" 4 (vector L -L L)) (pdata-set "n" 5 (vector L -L L)) (pdata-set "n" 6 (vector L -L -L)) (pdata-set "n" 7 (vector L -L -L)) (pdata-set "n" 8 (vector L -L -L)) (pdata-set "n" 9 (vector L L -L)) (pdata-set "n" 10 (vector L L -L)) (pdata-set "n" 11 (vector L L -L)) (pdata-set "n" 12 (vector -L L L)) (pdata-set "n" 13 (vector -L L L)) (pdata-set "n" 14 (vector -L L L)) (pdata-set "n" 15 (vector -L -L L)) (pdata-set "n" 16 (vector -L -L L)) (pdata-set "n" 17 (vector -L -L L)) (pdata-set "n" 18 (vector -L -L -L)) (pdata-set "n" 19 (vector -L -L -L)) (pdata-set "n" 20 (vector -L -L -L)) (pdata-set "n" 21 (vector -L L -L)) (pdata-set "n" 22 (vector -L L -L)) (pdata-set "n" 23 (vector -L L -L)) (finalise) (ungrab) ob ) )