以数字 7 为例子,它在框架上的表示如下:
e2
0.0 , 1.0
^
| ********
| *
| *
| *
| *
+------------> 1.0 , 0.0
0.0 , 0.0 e1
origin
使用书本 94 页提供的 flip-vert
函数:
;;; p94-flip-vert.scm
(define (flip-vect painter)
(transform-painter painter
(make-vect 0.0 1.0)
(make-vect 1.0 1.0)
(make-vect 0.0 0.0)))
可以将通过翻转框架来画出一个水平翻转的 7 :
origin
0.0 , 1.0 e1
+------------> 1.0 , 1.0
| *
| *
| *
| *
| ********
v
0.0 , 0.0
e2
使用书本 94 页提供的 rotate90
函数:
;;; p94-rotate90.scm
(define (rotate90 painter)
(transform-painter painter
(make-vect 1.0 0.0)
(make-vect 1.0 1.0)
(make-vect 0.0 0.0)))
可以将框架逆时针旋转 90 度:
e1
1.0 , 1.0
^
**** |
* **** |
* ** |
* |
|
<------------+
0.0 , 0.0 1.0 , 0.0
e2 origin
模仿以上的两个例子,现在可以给出变换 flip-horiz
、 rotate180
和 rotate270
。
以下是使用 flip-horiz
对画出数字 7 的画家进行水平翻转的过程:
e2 e2
0.0 , 1.0 1.0 , 1.0
^ ^
| ******** ******** |
| * flip-horiz * |
| * =============> * |
| * * |
| * * |
+------------> 1.0 , 0.0 0.0 , 0.0 <------------+
0.0 , 0.0 e1 e1 1.0 , 0.0
origin origin
以下是 flip-horiz
的定义:
;;; 50-flip-horiz.scm
(define (flip-horiz painter)
(transform-painter painter
(make-vect 1.0 0.0)
(make-vect 0.0 0.0)
(make-vect 1.0 1.0)))
以下是使用 rotate180
对画出数字 7 的画家进行逆时针 180 度翻转的过程:
e2 e1 origin
0.0 , 1.0 0.0 , 1.0 1.0 , 1.0
^ <------------+
| ******** * |
| * rotate180 * |
| * =============> * |
| * * |
| * ******** |
+------------> 1.0 , 0.0 v
0.0 , 0.0 e1 1.0 , 0.0
origin e2
以下是 rotate180
的定义:
;;; 50-rotate180.scm
(define (rotate180 painter)
(transform-painter painter
(make-vect 1.0 1.0)
(make-vect 0.0 1.0)
(make-vect 1.0 0.0)))
以下是使用 rotate270
对画出数字 7 的画家进行逆时针 270 度翻转的过程:
e2 origin
0.0 , 1.0 0.0 , 1.0 e2
^ +------------> 1.0 , 1.0
| ******** |
| * rotate270 | *
| * =============> | *** *
| * | *** *
| * | ****
+------------> 1.0 , 0.0 v
0.0 , 0.0 e1 0.0 , 0.0
origin e1
以下是 rotate270
的定义:
;;; 50-rotate270.scm
(define (rotate270 painter)
(transform-painter painter
(make-vect 0.0 1.0)
(make-vect 0.0 0.0)
(make-vect 1.0 1.0)))