#lang racket ;;;; Новогоднее поздравление 2019. ;;;; М. А. Крышень, 2018 г. ;;;; ;;;; Изображение сохраняется в ny2019.png. (require plot (except-in 2htdp/image line)) ;;; График с "елочкой". (define ny-plot (plot3d (list (parametric3d (λ (t) (vector (* t (sin t)) (* t (cos t)) (- t))) 0 (* pi 9) #:label "x=t⋅sin(t), y=t⋅cos(t), z=-t" #:color '(0 128 0) #:width 2) (parametric3d (λ (t) (vector (* t (- (sin t))) (* t (- (cos t))) (- t))) 0 (* pi 9) #:label "x=-t⋅sin(t), y=-t⋅cos(t), z=-t" #:color 'blue #:width 2 #:style 'dot) ;; Зведа (ломанная по точкам). (lines3d (map (λ (p) ;; К трем координатам с масштабированием. (vector (* 2.5 (car p)) 0 (* 0.8 (cadr p)))) ;; Точки звезды в 2D. '((-2 -2) (0 6) (2 -2) (-3 3) (3 3) (-2 -2))) #:label "★" #:width 2 #:color 'red)) #:altitude 19 #:height 600 #:width 400)) ;;; Добавляет фон и поля. (define (background image color border) (overlay image (rectangle (+ (image-width image) (* border 2)) (+ (image-height image) (* border 2)) 'solid color))) ;;; График вместе с подписью. (define ny-poster (background (above ny-plot (text/font "С Новым годом!" 32 'blue #f 'roman 'normal 'normal #f) (text/font "2019" 32 'red #f 'roman 'normal 'normal #f)) 'white 5)) (save-image (scale 2 ny-poster) "ny2019.png")