- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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
的情况下,origin
、corner1
和 corner2
作为参数传递给 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坐标变换)。
但是请注意,这是一个在正确的点“结束”的向量。您还必须翻译原点才能获得正确的框架。现在观察新原点位于新原点点,并且您寻找的新角点(红色角点)确实是前两个角点的向量差。
(图片显示位于单位正方形内的蓝色框被映射到红色框上)
关于scheme - Transform-painter 如何在 SICP 中的图像语言中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15541632/
我创建了一个 Painter 类,它应该在屏幕上绘制一个圆弧,但是当键盘聚焦在一个 TextField 上时它会升高。删除 SingleChildScrollView 解决了这个问题,但它显示了 n
我知道 painter.setWindow 是如何工作的。例如,如果我将小部件最大化,那么我在该小部件中绘制的内容也会以相同的比例变大。 但我不明白 painter.setViewport 究竟做了什
我想知道是否有一种方法可以将一堆形状绘制为自己的对象,以便当用户想要缩放、更改颜色或旋转时,所有形状都会相应调整? 然后我希望将这组形状放置在 QGraphicsView 上预定的 x,y 坐标处并具
我有一些数据会不断变化。我通过 QPainter 将这些数据绘制成一行,并想通过 QTimer 进行动态更新(每秒更新一次),但数据只会在我关闭绘画窗口时更新,它不会在窗口中实时更新。我哪里错了??这
我正在开发一款名为“Pogo Painter”的迷你游戏,我需要一些数学解决方案。下面是一张图片(用 Paint 制作)来说明它的全部内容。 四名不同颜色的玩家必须占据方 block 才能获得分数。迷
我的任务: 创建一个程序来仅使用基元(如三角形或其他东西)复制图片(作为输入给出)。该程序应使用进化算法来创建输出图片。 我的问题: 我需要发明一种算法来创建种群并检查它们(它们与输入图片的匹配程度
我想在 Qt 中非常有效地绘制基本的 2D 形状(正方形),因此我继承了 QOpenGLWidget 如下: WatorOpenGLWidget.hpp #include #include #in
我正在创建一个继承自 NimbusLookAndFeel 的外观,让我知道如何注册我自己的组件以使用它们的自定义 Painter。 例如,像这样的 ButtonPainter 类的 JButton 曾
我需要了解如何更改创建自己的 Painter 方法的 JPanel 颜色的逻辑。我创建了一个示例项目用于说明; 问题:按钮操作中的直接颜色更改代码不会更改任何内容。 问题 1) 重写 paintCom
我创建了 QToolBar 的子类,使上下文工具栏与 QGraphicsItem 相关联。 我想要添加的是一个小三角形指向我的工具栏弹出的位置。我知道 QPainter 不能在 QToolBar 之外
我已经将图像存储在板本地目录(/home/images/system/image.png) 对于 painter.drawimage 函数,将 Qpoint 和 Qimage 作为参数传递。 pain
使用画家,可以使用 fragment 在 ImageBitmap 上绘制 val imageBitmap: ImageBitmap = imageResource(id = R.drawable
In the picture language in SICP我无法理解 transform-painter 过程的工作原理: (define (transform-painter painter o
我在我的挥杆应用程序中使用 Nimbus 外观。 我设置了 UIDefaults 的主要和次要属性的外观和感觉。 颜色是对的。现在我有一个问题,组件的画家使用颜色,这些颜色是在更新颜色主题之前定义的。
我正在努力学习如何使用绘图功能。到目前为止,我已经能够使用 QPainter 类在 QWidget 上绘制一些圆圈,如下所示: 我在 MainWindow.h 中添加了: virtual void
我在这里指的是图形中使用的画家算法。我有一些代码,其中我使用它们的中点从前到后绘制多边形来判断它们离视点有多远。我知道这不适用于重叠的多边形或彼此相交的多边形,但这在所有其他情况下都有效吗?这在多边形
我正在使用 Java 从头开始制作 3D 渲染器,没有外部库。当我尝试优化时,我想知道画家算法是否比 Z 缓冲更快的一般/平均答案。假设我正在渲染一个相同的立方体,这样会更快。但我不希望相交的多边
我正在为给定字符绘制字形轮廓,使用: QString myfname="FreeMono.ttf"; QRawFont *myfont=new QRawFont(myfname,324,QFont::
由于某种原因,Stack 小部件没有显示带有 CustomPaint 的 Container。 但是,如果从 Stack 中删除,它可以正常工作。我在这里错过了什么? class _DemoNavBa
你好,谁能告诉我为什么这个掩蔽尝试的背景是黑色的。这一定很接近,但我就是无法杀死背景。我看到其他人提到 saveLayer(rect, paint) 是这里的关键,因为它将整个 Canvas 矩形插入
我是一名优秀的程序员,十分优秀!