(define (midpoint p1 p2) (lerp p1 p2 0.5)) (define (frac-tri p0 p1 p2 depth maxdepth freq amp) (if (= depth maxdepth) (polygon 'P (list p0 p1 p2)) (let ( (n0 (midpoint p0 p2)) (n1 (midpoint p0 p1)) (n2 (midpoint p1 p2)) (tn y-axis) ) (set! n0 (+ n0 (* (noise (* n0 freq)) amp tn))) (set! n1 (+ n1 (* (noise (* n1 freq)) amp tn))) (set! n2 (+ n2 (* (noise (* n2 freq)) amp tn))) (frac-tri p0 n1 n0 (add1 depth) maxdepth (* freq 2) (/ amp 2)) (frac-tri n1 p1 n2 (add1 depth) maxdepth (* freq 2) (/ amp 2)) (frac-tri n0 n2 p2 (add1 depth) maxdepth (* freq 2) (/ amp 2)) (frac-tri n0 n1 n2 (add1 depth) maxdepth (* freq 2) (/ amp 2))))) (define (triangle level) (frac-tri #<-1 0 0> #<1 0 0> #<0 0 1> 1 level 5 0.3) ) (world (frac-tri #<-1 0 0> #<1 0 0> #<0 0 1> 1 5 2.2 2))