sicp每日一题[2.50]

news/2024/10/20 9:19:22

Exercise 2.50

Define the transformation flip-horiz, which flips painters horizontally, and transformations that rotate painters counterclockwise by 180 degrees and 270 degrees.


这道题挺有意思的,搞明白这道题就明白了 frame 的3个点的位置。如上图所示,为了更好区分,特意用了长方形而不是正方形,第一幅图是原图,O 表示 origin, A 表示 edge1,B 表示 edge2。无论进行何种变换,左下坐标都是 (0, 0),左上都是(0, 1), 右下都是(1, 0), 右上都是(1, 1),我们只要把变换后的图形中 O, A, B 的新位置作为参数传进去就行。

#lang racket(require (planet "sicp.ss" ("soegaard" "sicp.plt" 2 1)))(define sub-vect vector-sub); Transforming and combining painters
(define (transform-painter painter origin corner1 corner2)(lambda (frame)(let ((m (frame-coord-map frame)))(let ((new-origin (m origin)))(painter (make-framenew-origin(sub-vect (m corner1) new-origin)(sub-vect (m corner2) new-origin)))))))(define (flip-horiz painter)(transform-painter painter(make-vect 1.0 0.0) ; new origin(make-vect 0.0 0.0) ; new end of edge1(make-vect 1.0 1.0))) ; new end of edge2(define (rotate90 painter)(transform-painter painter(make-vect 1.0 0.0) ; new origin(make-vect 1.0 1.0) ; new end of edge1(make-vect 0.0 0.0))) ; new end of edge2(define (rotate180 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(define (rotate270 painter)(transform-painter painter(make-vect 0.0 1.0) ; new origin(make-vect 0.0 0.0) ; new end of edge1(make-vect 1.0 1.0))) ; new end of edge2(paint einstein)
(paint (flip-horiz einstein))
(paint (rotate90 einstein))
(paint (rotate180 einstein))
(paint (rotate270 einstein))

效果如下图所示,为了跟水平翻转对比,特意把原图加上了:





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/73722.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

stiReport中的DataBand的DataSource要设置,不然打印时哪怕数据有两行也只显示一行

stiReport中的DataBand的DataSource要设置,不然打印时哪怕数据有两行也只显示一行。哪怕report的数据源是通过程序动态设置的,这个属性也要在设计时有值。

读数据工程之道:设计和构建健壮的数据系统14源系统

源系统1. 源系统中的数据生成 1.1. 数据工程师的工作是从源系统获取数据,对其进行处理,使其有助于为下游用例提供服务 1.2. 数据工程师的角色将在很大程度上转向理解数据源和目的地之间的相互作用 1.3. 数据工程的最基本的数据管道任务——将数据从A移动到B 2. 数据源 2.1. 数…

Gartner 魔力象限:企业备份和恢复解决方案 2024

Gartner Magic Quadrant for Enterprise Backup and Recovery Solutions 2024Gartner Magic Quadrant for Enterprise Backup and Recovery Solutions 2024 Gartner 魔力象限:企业备份和恢复解决方案 2024 请访问原文链接:https://sysin.org/blog/gartner-magic-quadrant-ent…

VMware Aria Operations for Networks 6.14 发布,新增功能概览

VMware Aria Operations for Networks 6.14 发布,新增功能概览VMware Aria Operations for Networks 6.14 发布,新增功能概览 VMware Aria Operations for Networks 6.14 - 网络和应用监控工具 请访问原文链接:https://sysin.org/blog/vmware-aria-operations-for-networks/…

龙芯吧小吧主彭东锋(知乎直答)

龙芯吧小吧主彭东锋(知乎直答) 回答 深入 彭东锋是指龙芯吧的小吧主,他在网络上以用户名@gueenet活跃,并且以其在视频平台发布的评测内容而闻名。以下是对其含义的具体解释及延伸: 身份定位:彭东锋是龙芯吧的小吧主,拥有一定的管理和发言权。他在视频平台上发布关于国产…

重构大师-二-

重构大师(二)原文:www.gongtongchu.cn移除对参数的赋值原文:refactoringguru.cn/remove-assignments-to-parameters问题 一些值在方法体内被赋给参数。 解决方案 使用局部变量代替参数。 之前 int discount(int inputVal, int quantity) {if (quantity > 50) {inputVal …

智源大会-2023-笔记-一-

智源大会 2023 笔记(一) [2023北京智源大会]AI生命科学 - P1 - Mercurialzs - BV1KV4y117m5 welcome to the symposiuai for life science,im sunny,i,thank the organers for giving me。 the honor to chthis,imposing,imposi,we have a change in the program。 unf…