Решение упражнения 2.50 из SICP
Для горизонтального отражения и поворотов на 180 и 270 градусов против часовой стрелки будем также применять transform-painter. Схематически каждое из этих преобразований обозначено на рисунке ниже:

Думаю, чертеж объясняет в даном случае лучше слов. Таким образом мы легко получаем следующие определения процедур:
(define (flip-horiz painter) (transform-painter painter (make-vector 1.0 0.0) (make-vector 0.0 0.0) (make-vector 1.0 1.0)))
(define (rotate-180 painter) (transform-painter painter (make-vector 1.0 1.0) (make-vector 0.0 1.0) (make-vector 1.0 0.0)))
(define (rotate-270 painter) (transform-painter painter (make-vector 0.0 1.0) (make-vector 0.0 0.0) (make-vector 1.0 1.0)))
Все делается аналогично повороту на 90 градусов.
Write a comment