用 DrScheme 画简单的图形
SICP 的 2.2.4 节描述了一种图形语言,并假定用户的 scheme 环境提供了一个 draw-line 画线原语。scheme 环境很多,有一些提供了作图支持。虽然没有图形支持也可以完成此节的习题--只要写出基于 draw-line 的代码就可以了,但实践一下还是有好处的。
下面我将介绍一点 DrScheme 的画图功能,只涉及做 SICP 习题所需要的部分。
下面我将介绍一点 DrScheme 的画图功能,只涉及做 SICP 习题所需要的部分。
- import 图形库
- (require scheme/class scheme/gui/base)
- 建立一个窗体
- (define frame (new frame% (label "painter")
- (width 320)
- (height 240)))
注意,上面的 frame 和书中的 frame 或框架不是同一个概念。DrScheme 的图形库基于 wxwindow,frame 的含义指一般的窗口。 - 在窗体中加入一张画布
- (define canvas
- (new canvas% (parent frame)
- (paint-callback
- (lambda (canvas dc) (draw-face dc)))))
上面的代码指明了 canvas 的 parent 是 frame. - 显示窗口
- (send frame show #t)
现在运行代码,可以得到一个空白窗口,之后就可以画图了。 - 获取画布和生成画笔
- (define dc (send canvas get-dc))
- (define pen (make-object pen% "BLACK" 1 'solid))
- (define (draw-face dc)
- (send dc set-pen pen) )
用 (send convas get-dc) 获取作图区域,然后可以用 send 向 dc 发送各种作图消息。 - 画一条直线
- (send dc draw-line 0 0 320 240)
try.drawline.png (4.7 KB, 下载次数: 23)
[ 本帖最后由 win_hate 于 2008-10-4 23:58 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
DrScheme 提供的库能画曲线。
能画曲线吗?
把书上的其它几个图都画出来了。
wave4.png (6.57 KB, 下载次数: 28)
下载附件
2008-10-07 18:48 上传
right.split.png (17.06 KB, 下载次数: 22)
下载附件
2008-10-07 18:48 上传
up.split.png (13.26 KB, 下载次数: 19)
下载附件
2008-10-07 18:48 上传
corner.split.png (22.11 KB, 下载次数: 22)
下载附件
2008-10-07 18:48 上传
square.limit.png (32.12 KB, 下载次数: 29)
下载附件
2008-10-07 18:48 上传
[ 本帖最后由 win_hate 于 2008-10-7 18:51 编辑 ]
还没见过这么高级的装备呢,
[ 本帖最后由 win_hate 于 2008-10-7 18:49 编辑 ]
这个貌似拿透明的坐标纸来搞比较方便点
注意那个 squash。以前看《西游记》的时候,那些妖精就是这样飞的,不知该剧的美工是不是看过 SICP?
终于把那个邪恶的 wave 画出来了。我可是拿尺子按书上的图一个点一个点量的,苦。
复制代码
复制代码
wave:
wave.png (5.32 KB, 下载次数: 21)
下载附件
2008-10-06 21:15 上传
flip, beside:
flip.beside.png (6.86 KB, 下载次数: 24)
下载附件
2008-10-06 21:15 上传
squash:
xie.png (6.26 KB, 下载次数: 17)
下载附件
2008-10-06 21:15 上传
[ 本帖最后由 win_hate 于 2008-10-6 21:19 编辑 ]
要做 SICP 中的相关习题,上面的知识足够了。如果想继续深入,可以看 PLT Scheme 的帮助文档:
GUI: PLT Graphics Toolkit.
复制代码
并把 segments->painter 中的 draw-line 替换为我们的 Draw-line. 注意,这里的 Draw-line 使用了“全局变量” dc.
复制代码
复制代码
复制代码
X.noraml.png (4.52 KB, 下载次数: 23)
下载附件
2008-10-04 22:23 上传
复制代码
flip.vert.png (4.52 KB, 下载次数: 23)
下载附件
2008-10-04 22:23 上传
复制代码
X.transformed.png (4.14 KB, 下载次数: 20)
下载附件
2008-10-04 22:23 上传
[ 本帖最后由 win_hate 于 2008-10-4 22:28 编辑 ]