sicp每日一题[2.49]
1.sicp每日一题[1.42]2.sicp每日一题[1.43]3.sicp每日一题[1.44]4.sicp每日一题[1.45]5.sicp每日一题[1.46]6.sicp每日一题[2.1]7.sicp每日一题[2.2]8.sicp每日一题[2.3]9.sicp每日一题[2.4]10.sicp每日一题[2.5]11.sicp每日一题[2.6]12.sicp每日一题[2.7]13.sicp每日一题[2.8]14.sicp每日一题[2.9]15.sicp每日一题[2.11]16.sicp每日一题[2.10]17.sicp每日一题[2.12]18.sicp每日一题[2.13-2.16]19.sicp每日一题[2.17]20.sicp每日一题[2.18]21.sicp每日一题[2.19]22.sicp每日一题[2.20]23.sicp每日一题[2.21]24.sicp每日一题[2.22-2.23]25.sicp每日一题[2.24-2.27]26.sicp每日一题[2.28]27.sicp每日一题[2.29]28.sicp每日一题[2.30]29.sicp每日一题[2.31]30.sicp每日一题[2.32]31.sicp每日一题[2.33]32.sicp每日一题[2.34]33.sicp每日一题[2.35]34.sicp每日一题[2.36-2.37]35.sicp每日一题[2.38-2.39]36.sicp每日一题[2.40]37.sicp每日一题[2.41]38.sicp每日一题[2.42]39.sicp每日一题[2.43]40.sicp每日一题[2.44]41.sicp每日一题[2.45]42.sicp每日一题[2.46]43.sicp每日一题[2.47]44.sicp每日一题[2.48]
45.sicp每日一题[2.49]
46.sicp每日一题[2.50]47.sicp每日一题[2.51]48.sicp每日一题[2.52]49.sicp每日一题[2.53-2.55]50.sicp每日一题[2.56]51.sicp每日一题[2.57]52.sicp每日一题[2.58]53.sicp每日一题[2.59]54.sicp每日一题[2.60]55.sicp每日一题[2.61]56.sicp每日一题[2.62]57.sicp每日一题[2.63-2.64]58.sicp每日一题[2.65]59.sicp每日一题[2.66]60.sicp每日一题[2.67-2.68]61.sicp每日一题[2.69]62.sicp每日一题[2.70]63.sicp每日一题[2.71]64.sicp每日一题[2.72]65.sicp每日一题[2.73]66.sicp每日一题[2.74]67.sicp每日一题[2.75]68.sicp每日一题[2.76]69.sicp每日一题[2.77]70.sicp每日一题[2.78]71.sicp每日一题[2.79]72.sicp每日一题[2.80]73.sicp每日一题[2.81]74.sicp每日一题[2.82]75.sicp每日一题[2.83]76.sicp每日一题[2.84]77.sicp每日一题[2.85-2.86]Exercise 2.49
Use segments->painter to define the following primitive painters:
a. The painter that draws the outline of the designated frame.
b. The painter that draws an “X” by connecting opposite corners of the frame.
c. The painter that draws a diamond shape by connecting the midpoints of the sides of the frame.
d. The wave painter.
这道题目我本来感觉不是很难,我按照题目要求把 frame 的3个点坐标取出来,然后用 make-segment 连成线,但是做了半天总是不行,
上网搜了一下其他人的答案,发现他们都是直接传的 segment-list,而不是传 frame,而且之前定义的 make-vect, make-segment 也都用不了。。
必须先导入 sicp-pict,然后再用它自带的 vect 和 segment 来创建向量和线段。完整代码如下:
(#%require sicp-pict)
; a
(define outline
(segments->painter
(list
(segment (vect 0.0 0.0) (vect 0.0 1.0))
(segment (vect 0.0 0.0) (vect 1.0 0.0))
(segment (vect 0.0 1.0) (vect 1.0 1.0))
(segment (vect 1.0 0.0) (vect 1.0 1.0)))))
; b
(define x-painter
(segments->painter
(list
(segment (vect 0.0 0.0) (vect 1.0 1.0))
(segment (vect 0.0 1.0) (vect 1.0 0.0)))))
; c
(define diamond
(segments->painter
(list
(segment (vect 0.0 0.5) (vect 0.5 1.0))
(segment (vect 0.5 1.0) (vect 1.0 0.5))
(segment (vect 1.0 0.5) (vect 0.5 0.0))
(segment (vect 0.5 0.0) (vect 0.0 0.5)))))
; d
(define wave
(segments->painter (list
(segment (vect .25 0) (vect .35 .5))
(segment (vect .35 .5) (vect .3 .6))
(segment (vect .3 .6) (vect .15 .4))
(segment (vect .15 .4) (vect 0 .65))
(segment (vect 0 .65) (vect 0 .85))
(segment (vect 0 .85) (vect .15 .6))
(segment (vect .15 .6) (vect .3 .65))
(segment (vect .3 .65) (vect .4 .65))
(segment (vect .4 .65) (vect .35 .85))
(segment (vect .35 .85) (vect .4 1))
(segment (vect .4 1) (vect .6 1))
(segment (vect .6 1) (vect .65 .85))
(segment (vect .65 .85) (vect .6 .65))
(segment (vect .6 .65) (vect .75 .65))
(segment (vect .75 .65) (vect 1 .35))
(segment (vect 1 .35) (vect 1 .15))
(segment (vect 1 .15) (vect .6 .45))
(segment (vect .6 .45) (vect .75 0))
(segment (vect .75 0) (vect .6 0))
(segment (vect .6 0) (vect .5 .3))
(segment (vect .5 .3) (vect .4 0))
(segment (vect .4 0) (vect .25 0))
)))
(paint outline)
(paint x-painter)
(paint diamond)
(paint wave)
效果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?