(define triangle-box! (lambda (image number side starth startv startcolor endcolor) (let ((palette (make-vector number "BALLS")) (tommy (turtle-new image))) (turtle-teleport! tommy starth startv) (let make-palette ((index1 0)) (if (< index1 number) (begin (vector-set! palette index1 (rgb-new (/ (+ (* (- number index1) (rgb-red startcolor)) (* index1 (rgb-red endcolor))) number) (/ (+ (* (- number index1) (rgb-green startcolor)) (* index1 (rgb-green endcolor))) number) (/ (+ (* (- number index1) (rgb-blue startcolor)) (* index1 (rgb-blue endcolor))) number))) (make-palette (+ 1 index1))))) (let draw-squares ((index2 0) (sidelength side)) (if (< index2 number) (begin (turtle-set-color! tommy (vector-ref palette index2)) (turtle-forward! tommy sidelength) (turtle-turn! tommy 90) (turtle-forward! tommy sidelength) (turtle-turn! tommy 90) (turtle-forward! tommy sidelength) (turtle-turn! tommy 90) (turtle-forward! tommy sidelength) (turtle-turn! tommy 90) (turtle-forward! tommy (/ sidelength 2)) (turtle-turn! tommy 45) (draw-squares (+ 1 index2) (* sidelength 0.7071067812)))))))) (define canvas (image-new 200 200)) (define prime? (lambda (number) (let kernel ((index 2)) (if (<= index (sqrt number)) (if (int? (/ number index)) #f (kernel (+ 1 index))) #t)))) (define factorthis (lambda (number) (let listmaker ((index 1) (vectorlist null)) (if (< index number) (if (int? (/ number index)) (listmaker (+ 1 index) (cons index vectorlist)) (listmaker (+ 1 index) vectorlist)) (list->vector (cons number vectorlist)))))) (define exp2 (lambda (base power) (exp (* (log base) power)))) (define rgb-mod-new (lambda (number modi) (cond ((<= number (/ modi 3)) (rgb-new (* (/ 255 (/ modi 3)) (- (/ modi 3) number)) (* (/ 255 (/ modi 3)) number) 0)) ((<= number (* 2 (/ modi 3))) (rgb-new 0 (* (/ 255 (/ modi 3)) (- (* 2 (/ modi 3)) number)) (* (/ 255 (/ modi 3)) (- number (/ modi 3))))) ((<= number modi) (rgb-new (* (/ 255 (/ modi 3)) (- number (* 2 (/ modi 3)))) 0 (* (/ 255 (/ modi 3)) (- modi number))))))) (define image-series (lambda (n width height) (let* ((img (image-new width height)) (factorvector (factorthis n)) (factorslength (vector-length factorvector))) (image-show img) (let kernel ((index 0)) (if (< index factorslength) (begin (triangle-box! img 5 (* (vector-ref factorvector index) (/ height 1000)) (* (/ height 1000) (vector-ref factorvector index)) (* (/ height 1000) (vector-ref factorvector (- (- factorslength index) 1))) (rgb-mod-new (vector-ref factorvector index) n) (rgb-mod-new (vector-ref factorvector (- (- factorslength index) 1)) n)) (kernel (+ 1 index))))))))