gpt4 book ai didi

scheme - Transform-painter 如何在 SICP 中的图像语言中工作

转载 作者:行者123 更新时间:2023-12-02 11:34:18 25 4
gpt4 key购买 nike

In the picture language in SICP我无法理解 transform-painter 过程的工作原理:

(define (transform-painter painter origin corner1 corner2)
(lambda (frame)
(let ((m (frame-coord-map frame)))
(let ((new-origin (m origin)))
(painter
(make-frame new-origin
(sub-vect (m corner1) new-origin)
(sub-vect (m corner2) new-origin)))))))

具体来说为什么需要用新原点对参数帧的边缘映射进行向量减法。我本以为新角的映射,即 (mcorner1)(mcorner2),可以作为变换后的框架的新边缘。

我做了一些计算,我想知道我在哪里混淆了。以flip-vert为例,

(define (flip-vert painter)
(transform-painter painter
(make-vect 0.0 1.0) ; new origin
(make-vect 1.0 1.0) ; new end of edge1
(make-vect 0.0 0.0))) ; new end of edge2

flip-vert 将具有以下尺寸的框架作为参数,

Origin = (0, 0), Edge1 = (4, 0), Edge2 = (0, 4)

相应地,映射公式将变为 (0,0) + x(4,0) + y(0, 4)

flip-vert 的情况下,origincorner1corner2 作为参数传递给 transform-painter 分别为 (0,1)(1,1)(0,0)

因此,将它们依次放入映射公式后,我们就得到了结果

new-origin = (0,0)+0*(4,0)+1*(0,4) = (0,4)

mapped-corner1 = (0,0)+1*(4,0)+1*(0,4) = (4,4)

mapped-corner2 = (0,0)

现在,transform-painter 获取最后两个结果,并将它们减去 new-origin 以构建新框架,从而产生具有以下尺寸的框架。

Origin = (0,4), New-corner1 = (4,0), New-corner2 = (0,-4)

查看坐标平面上的这些点,结果似乎不正确,而进行减法之前的原始角点结果却正确。我做错了什么?

最佳答案

请看附图(抱歉我的绘画技巧:))。我已将转换后的向量标记为mcorner1,你说它足以作为新的向量画家要在其上进行操作的新框架的角点(mcorner1是映射到corner1点的m坐标变换)。

但是请注意,这是一个在正确的点“结束”的向量。您还必须翻译原点才能获得正确的框架。现在观察新原点位于新原点点,并且您寻找的新角点(红色角点)确实是前两个角点的向量差。

the blue frame that lies in the unit square is mapped onto the red frame

(图片显示位于单位正方形内的蓝色框被映射到红色框上)

关于scheme - Transform-painter 如何在 SICP 中的图像语言中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15541632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com