SICP中的图片语言如何使用框架?

2024-02-18

我似乎无法理解 SICP 中框架的实现。

书中指出

我们将使用单位正方形中的坐标 (0

图像如何表示为坐标?我能想到的唯一解释是,所有图像(都是线条)只能映射到一个框架,该框架的边界不能超过单位正方形的边界。但我对此表示怀疑,因为书中的下一行解释了“框架坐标图”,说

该映射通过将向量 v = (x,y) 映射到向量和 Origin(Frame) + x*Edge1(Frame) + y*Edge2(Frame) 将单位正方形转换为帧

向量 (0,0) 映射到帧的原点,向量 (1,1) 映射到与原点对角相对的顶点,只会增加我的困惑。这些向量是什么?图像的起源还是什么?

我无法理解这一点,它阻止我进一步深入文本,因为之后讨论的所有内容都建立在这个概念的基础上。如果我能详细解释读过这本书的人如何理解这个想法,我会发现它非常有帮助。


您对图像的解释是正确的。图像由单位正方形中的线段组成,其中原点 (0, 0) 是左下角,(1, 1) 是右上角。

画家使用问题中给出的变换将图像映射到框架中。这einsten上面的图像是在默认框架(单位正方形)中绘制的,因此看起来很正常。

您可以使用以下命令创建并显示图像SICP图像语言 https://web.archive.org/web/20111105191213/http://planet.plt-scheme.org/package-source/soegaard/sicp.plt/2/1/planet-docs/sicp-manual/index.html分三步:

  • 定义线段列表
  • 从这些线段创建一个线段画家
  • 使用新的段画家调用油漆

我通过博客文章中的几个简单图像来做到这一点SICP 2.49:定义原始画家 https://web.archive.org/web/20181023051024/http://www.billthelizard.com/2011/10/sicp-249-defining-primitive-painters.html。这是一个仅使用两条线段的简单示例:

; The painter that draws an 'X' by connecting opposite corners of the frame.
(define x-segments
 (list
  (make-segment
   (make-vect 0.0 0.0)
   (make-vect 0.99 0.99))
  (make-segment
   (make-vect 0.0 0.99)
   (make-vect 0.99 0.0))))

(define x-painter (segments->painter x-segments))

(paint x-painter)

这是我在 DrRacket 中运行最后一个命令时的结果:

您可以通过创建要绘制的新框架来翻转和旋转图像。

框架由三个向量定义:

  • 起源
  • 底边 (edge1)
  • 左边缘 (edge2)

您可以使用transform-painter功能文中给出 https://web.archive.org/web/20100421220225/http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-15.html(在标题为画家的改造与结合)使用新的原点和边来转换现有的线段绘制器。

(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)))))))

例如,如果我想绘制向左旋转45度的原始爱因斯坦图像,我只需要传递einstein将画家与新原点、底部边缘和左侧边缘一起分割transform-painter它将返回一个新的段画家。换句话说,我需要告诉transform-painter在哪里绘制图像的左下角、右下角和左上角,它将完成原始线段绘制器中所有线段的变换工作。

; rotate an image 45 degrees to the left
(define (rotate-45 painter)
  ((transform-painter (make-vect 0.5 0.0)
                      (make-vect 1.0 0.5)
                      (make-vect 0.0 0.5))
   painter))

可以执行命令(paint (rotate-45 einstein))查看旋转后的图像。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SICP中的图片语言如何使用框架? 的相关文章

  • Android 如何从我的应用程序使用 SD 卡中的文件路径预览图像

    文件存在于sdcard image jpg我想创建我自己的应用程序 活动 按下按钮时 需要使用内置图像查看器显示存储在 SD 卡中的图像 按图像查看器中的后退按钮后 它应该返回到我正在运行的应用程序 需要一些帮助 您可以为此创建一个具有适当
  • 使用 TCPDF PHP 库横向显示的图像

    我正在使用 TCPDF PHP 库生成包含照片的 PDF 文档 由于某种原因 某些照片在我的计算机和网络上正确显示 但当我将该图像放入 PDF 中时 它似乎是横向的 这只发生在某些图像上 大多数图像显示正确 下面是在 PDF 中横向显示的示
  • 将 UIImage 放入 UIButton 的简单方法

    我的 iPhone 应用程序中有一个 UIButton 我将其大小设置为 100x100 我有一个 400x200 的图像 我希望在按钮中显示它 按钮仍然需要保持在 100x100 并且我希望图像缩小以适应 但是 保持正确的纵横比 我想这就
  • 如何在 Python 中将图像分割成多个部分

    我正在尝试使用 PIL 将一张照片分成多块 def crop Path input height width i k x y page im Image open input imgwidth im size 0 imgheight im
  • 从项目文件加载图像

    我正在尝试获取 png 图像 这是我的资源文件夹 我测试了这里写的解决方案 将图像添加到列表框 c Windows Phone 7 https stackoverflow com questions 9348766 add images t
  • 方案如何返回多个值?

    我注意到几乎所有方案函数只能返回一个列表作为输出 下面 我想返回邻居的所有相邻节点的多个值 define neighbors l w if and 1 l 1 w list and l 1 w and 1 l w how to output
  • 图像未显示在从 HTML 创建的 PDF 上

    我想动态创建 PDF 这意味着我将从 Google Drive 获取文件 然后将它们放入 HTML 代码中 并尝试从中创建 PDF 一切工作正常 除了图像没有显示 我现在正在做的是 从 HTML 字符串创建 HtmlOutput 获取该 H
  • Tkinter:无法识别图像文件中的数据[重复]

    这个问题在这里已经有答案了 我有以下问题 我使用外部应用程序生成 GIF 文件 对我来说 GIF 看起来不错 我可以毫无问题地打开它们 然而 使用 photo PhotoImage file screenshot file self pre
  • 从剪贴板获取图像 Awt 与 FX

    最近 我们的 Java FX 应用程序无法再从剪贴板读取图像 例如 用户在 Microsofts Paint 中选择图像的一部分并按复制 我不是在谈论复制的图像文件 它们工作得很好 我很确定它过去已经有效 但我仍然需要验证这一点 尽管如此
  • 如何在java中通过socket发送Image数据类型

    我真的很困惑如何通过套接字发送图像数据类型 请帮我 我已经搜索了如何将 Image 数据类型转换为 char 但结果是 0 Use ImageIO http docs oracle com javase 1 4 2 docs api jav
  • 在 Android 上将大位图文件的大小调整为缩放的输出文件

    我的文件中有一个大位图 例如 3888x2592 现在 我想将该位图大小调整为 800x533 并将其保存到另一个文件中 我通常会通过调用来缩放位图Bitmap createBitmap方法 但它需要一个源位图作为第一个参数 我无法提供它
  • 如何使用 jquery imgAreaSelect 用 php 裁剪图像?

    我正在使用以下 javascript 代码来实例化 jquery图像区域选择 http odyniec net projects imgareaselect 裁剪我的图像 document ready function ladybug im
  • 在单个显示器中绘制多个 jpeg 图像

    我需要在单个组合显示器 或画布 中绘制和显示多个 jpeg 图像 例如 假设我有图像 a b c d jpg 每个图像的大小不同 我想将它们绘制在 2x2 网格的一页上 能够为每个子图设置标题也很好 我一直在彻底寻找解决方案 但不知道如何去
  • 学习 LISP 的最佳方法是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何将图像显示为缩略图

    我有一个QTreeView显示硬盘驱动器和目录 我也有一个QListView显示图像文件如下 但我想将图像显示为缩略图 如下所示 My code mainWidget mainWidget QWidget parent QWidget pa
  • Emacs Lisp 可以将 lambda 形式分配给像Scheme 这样的变量吗?

    在研究 Emacs Lisp 的符号单元时 我发现像这样的示例函数 defun a rest x x 我可以打电话 symbol function a 返回 lambda rest x x 如果我愿意的话我可以使用它 gt lambda r
  • PIL.Image.open和tf.image.decode_jpeg返回值的区别

    我使用 PIL Image open 和 tf image decode jpeg 将图像文件解析为数组 但发现PIL Image open 中的像素值与tf image decode jpeg不一样 为什么会出现这种情况 Thanks 代
  • JavaFX:将像素写入 PixelWriter 的最快方法

    我正在寻找最快的方式来写入像素javafx scene image Image 写信给BufferedImage的后备数组要快得多 至少在我制作的测试图像上 只花了大约 20 毫秒BufferedImage WritableImage另一方
  • 为 iOS 应用程序加载基于 SVG 的图像资源

    我从 thenounproject 购买了一个图标作为 SVG 图像 然后我使用一个名为的 macOS 程序Gapplin http gapplin wolfrosch com 将此 SVG 导出为 PNG 图像 它显示为 100x100
  • 如何将Scheme中的函数应用于另一个函数返回的参数列表?

    假设有两个函数 f 和 v 进一步假设 v 返回长度为 n 的列表 并且 f 需要恰好 n 个参数 我正在Scheme中寻找正确的语法 以将f应用于v返回的列表 如果我使用语法 f v v arguments 然后我收到一个关于 f 需要

随机推荐

  • 更改factory_boy中的默认faker区域设置

    如何在 Python Factory boy 中为我的所有工厂设置默认区域设置 在文档中说应该设置它factory Faker override default locale但这对我的骗子没有任何作用 import factory from
  • 如何在 Angular 4 中使用 Material Design 图标?

    我想使用来自的图标https materialdesignicons com https materialdesignicons com 在我的 Angular 4 项目中 网站上的说明仅涵盖如何将其包含在Angular 1 x https
  • 使用 C# 控制台应用程序创建 HTTP POST 请求并接收响应

    我需要将数据发布到 URL https somesite com 以根据我发布的参数下载 responseStrem 中的文件 如何使用 C 控制台应用程序来做到这一点 参数 文件名 用户身份 密码 类型 using System usin
  • 流星,mongodb,空格键,如何只显示小数点后两位

    我有一个具有类似值的集合 pctFail 0 3515500159795462 当我将其传递给模板并显示为 myTemplate 时 它在我的 html 中显示为 0 3515500159795462 如何将其显示为 0 35 您可以使用模
  • C# 中的结构体数组

    我正在尝试使用结构数组从用户那里获取输入 然后打印它 using System using System Collections Generic using System Linq using System Text namespace C
  • 使用 JavaScript 计算速度返回 NaN

    我正在按照此处显示的示例进行操作如何在 Javascript 中检测互联网速度 https stackoverflow com questions 5529718 how to detect internet speed in javasc
  • 在 Bootstrap 中向 span div 添加边框会弄乱布局

    我从 Twitter Bootstrap 开始 有一个关于布局如何在其中发挥作用的问题 这是 HTML
  • Bootstrap .popover()“显示”和“销毁”无法正常工作

    当我在 手动 模式下使用引导弹出窗口时 销毁 和 隐藏 无法正常工作 当我使用隐藏和销毁时 弹出窗口不透明度更改为 0 但它没有将显示更改为无 这导致弹出窗口容器覆盖其下方的内容 否则 如果我使用 toogle 模式 它可以正常工作 My
  • 当我们实例化一个对象时,是否会创建超类的实例?

    当我们在java中实例化一个特定的类时 是否会创建超类的实例 如果是这种情况 那么实例化所有超类将会产生大量开销 我尝试了以下代码 public class AClass public AClass System out println C
  • 倾斜阴影,而不是内容

    考虑 div class my class AAA div 我只想倾斜阴影 但不倾斜内容div将阴影放入伪元素中 my class height 5rem width 10rem before content box shadow 0 2e
  • 从用户代理检测设备(移动设备)是什么的php脚本?

    我尝试编写一个 php 脚本 从标头中的用户代理返回设备 我看到的问题并不是简单地执行正则表达式 因为设备之间存在差异 我错了吗 所以我想要根据用户代理更新的移动设备列表 我找到了这个清单 手机用户代理列表 http en wikipedi
  • 避免跨线程操作错误的最简洁和正确的方法?

    我不太擅长代表 也不明白幕后发生的事情 我得到了cross thread operation从不同线程访问 UI 项目时出错 我想做的是在 a 中编写一个通用函数Utility类 以便我可以将任何方法 代码块传递给该函数 我可以通过多种方式
  • 具有不规则节点的分层 data.frame 到 JSON

    我有这个嵌套数据集 grandparent parent child grandchild age Grandma 100 Grandma John 72 Grandma John Jessica 41 Grandma John Joann
  • XmlSerializer 更改编码

    我正在使用这段代码Serialize XML to String XmlWriterSettings xmlWriterSettings new XmlWriterSettings indent true Encoding Encoding
  • emacs 创建键修饰符

    我在 mac 操作系统上使用 emacs 我想将修饰符 Meta Control 映射到一个简单的键 基本上这就是我需要的 global set key kbd a hyper 这里 a 只是 a 键 没有 Control a 或其他什么
  • 用C解析CSV文件[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一个库可以用来解析 C 中的 CSV 文件 我在 Linux 系统上 我知道关于this http
  • 我需要为 NSObject 调用 [super init] 或 [super initWithCoder] 等

    通常当我从UIclass I 将调用感兴趣的超类初始值设定项 但是 我不确定实施细节NSObject 似乎在成员变量方面没有太多进展 所以我想知道 我需要打电话吗 super init 如果我的子类扩展NSObject 从技术上来说 不 这
  • 如何捕获 Python Unittest 测试用例失败的屏幕截图

    我使用 Python 3 6 5 和以下库 Appium Python 客户端 0 26 单元测试2 1 1 0 硒 3 5 0 pytest 3 6 3 现在我需要截图以防测试失败 所以我故意做了一个错误的陈述self driver fi
  • 无法理解使用 Eclipse 的 Maven pom 文件

    I am very new to Maven and i am creating my first maven project of maven archetype quickstart 然后它会生成错误消息 但在我的项目资源管理器中 我无
  • SICP中的图片语言如何使用框架?

    我似乎无法理解 SICP 中框架的实现 书中指出 我们将使用单位正方形中的坐标 0 图像如何表示为坐标 我能想到的唯一解释是 所有图像 都是线条 只能映射到一个框架 该框架的边界不能超过单位正方形的边界 但我对此表示怀疑 因为书中的下一行解