PasteRack.org
Paste # 42770
2025-09-22 09:13:53

Fork as a new paste.

Paste viewed 374 times.


Embed:

  1. #lang racket
  2.  
  3. (require 2htdp/image)
  4.  
  5. (struct mycircle (radius) #:transparent)
  6. (struct mysquare (side) #:transparent)
  7.  
  8. ;; Helper functions
  9. (define (half n) (/ n 2))
  10. (define (hypotenuse a b) (sqrt (+ (sqr a) (sqr b))))
  11. (define (hypotenuse-equal a) (hypotenuse a a))
  12.  
  13. (define (inner-circle-size frame-size) (half frame-size))
  14. (define (inner-square-size frame-size) (hypotenuse-equal (half frame-size)))
  15.  
  16. ;; Drawing helper functions
  17. (define (draw-bordered-shape shape shape-size fill-color)
  18.   (underlay (shape shape-size "solid" fill-color)
  19.             (shape shape-size "outline" "green")))
  20.  
  21. (define (draw-bordered-red-circle c)
  22.   (draw-bordered-shape circle (mycircle-radius c) "red"))
  23.  
  24. (define (draw-bordered-white-square s)
  25.   (draw-bordered-shape square (mysquare-side s) "white"))
  26.  
  27. (define (tilt pic) (rotate 45 pic))
  28.  
  29. ;; Recursive rose drawing function
  30. (define (draw-recursive-rose frame-size)
  31.   (cond
  32.     [(< (inner-square-size frame-size) 1) empty-image]  ; base case: stop when inner square < 1
  33.     [else
  34.      (underlay (draw-bordered-white-square (mysquare frame-size))
  35.                (draw-bordered-red-circle (mycircle (inner-circle-size frame-size)))
  36.                (tilt (draw-recursive-rose (inner-square-size frame-size))))]))
  37.  
  38. ;; Test the recursive rose
  39. (define recursive-rose (draw-recursive-rose 100))
  40. recursive-rose
  41.  
  42. ;; Optional: function to count how many layers will be generated
  43. (define (count-rose-layers frame-size)
  44.   (cond
  45.     [(< (inner-square-size frame-size) 1) 0]
  46.     [else (+ 1 (count-rose-layers (inner-square-size frame-size)))]))
  47.  
  48. ;; See how many layers a frame size of 100 will generate
  49. (count-rose-layers 100)

=>

image

13