Последняя задачка.Написать функцию, рекурсивно рисующую фигуру вида - Lisp
Решение задачи: «Последняя задачка.Написать функцию, рекурсивно рисующую фигуру вида»
textual
Листинг программы
(defun rec-sqr (w n cx cy) (if (zerop n) t (let ((x1 (* 0.5 (+ (nth 0 cx) (nth 1 cx)))) (x2 (* 0.5 (+ (nth 1 cx) (nth 2 cx)))) (x3 (* 0.5 (+ (nth 2 cx) (nth 3 cx)))) (x4 (* 0.5 (+ (nth 3 cx) (nth 0 cx)))) (y1 (* 0.5 (+ (nth 0 cy) (nth 1 cy)))) (y2 (* 0.5 (+ (nth 1 cy) (nth 2 cy)))) (y3 (* 0.5 (+ (nth 2 cy) (nth 3 cy)))) (y4 (* 0.5 (+ (nth 3 cy) (nth 0 cy))))) (grwLine w x1 y1 x2 y2 _RED) (grwLine w x2 y2 x3 y3 _RED) (grwLine w x3 y3 x4 y4 _RED) (grwLine w x4 y4 x1 y1 _RED) (rec-sqr w (- n 1) (list x1 x2 x3 x4) (list y1 y2 y3 y4))))) (defun start nil (let ((w (gensym 'w))) (grwCreate w 300 300 "Квадраты" _WHITE) (grwScale w -100 100 -100 100) (grwShow w) (rec-sqr w 5 '(-80 80 80 -80) '(80 80 -80 -80))))
Объяснение кода листинга программы
Код, представленный пользователем, написан на языке программирования Lisp. Он содержит две функции: rec-sqr
и start
.
- Функция
rec-sqr
принимает четыре аргумента:w
,n
,cx
иcy
.- Аргумент
w
представляет собой графический контекст, который будет использоваться для рисования. - Аргумент
n
является счетчиком, который уменьшается на единицу на каждой итерации рекурсии. - Аргументы
cx
иcy
являются списками координат вершин квадрата. Если значениеn
равно нулю, то выполняется рекурсивный вызов функции с уменьшенным на единицу значениемn
и новыми списками координат вершин квадрата. В противном случае, внутри функции создаются новые переменныеx1
,x2
,x3
иx4
, которые представляют собой координаты вершин квадрата, вычисленные на основе аргументовcx
. Аналогично создаются переменныеy1
,y2
,y3
иy4
на основе аргументовcy
. Затем вызывается функцияgrwLine
, которая рисует линии между вершинами квадрата, используя графический контекстw
и цвет _RED.
- Аргумент
- Функция
start
является точкой входа в программу.- Сначала создается графический контекст
w
с размерами 300x300 пикселей. - Затем контекст
w
масштабируется до размеров -100x100 пикселей. - Контекст
w
отображается на экране. - Вызывается функция
rec-sqr
с аргументамиw
,5
,(-80 80 80 -80)
и'(80 80 -80 -80)
. Это создает квадрат размером 5, с координатами вершин, указанными в аргументахcx
иcy
функцииrec-sqr
. Вот список номеров элементов кода, выделенных в тексте:
- Сначала создается графический контекст
- (defun rec-sqr (w n cx cy)
- (defun start nil
- (let ((w (gensym 'w)))
- (grwCreate w 300 300
Квадраты
_WHITE) - (grwScale w -100 100 -100 100)
- (grwShow w)
- (rec-sqr w 5 '(-80 80 80 -80) '(80 80 -80 -80)))))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д