2

我正在尝试使用初级学生语言中的放置图像将垂直定位的矩形和另一个对象放置在空白场景中。但是,当我运行该函数时,当矩形的宽度设置为等于场景的宽度时,该矩形仅在水平方向占据一半的场景。

我使用 Stepper 检查了我的代码发生了什么,发现图像宽度减半的位置,但我不知道为什么。可能与我不太熟悉的缺点有关。 在这两个步骤之间,宽度减半

这是完整的代码:

(require 2htdp/image)

(define WIDTH 400)
(define HEIGHT 300)
(define HMAX 100)
(define SCENE (empty-scene WIDTH HEIGHT))

(define-struct vcham [x h c])
(define c (make-vcham 0 100 "white"))

(define (render ch)
  (place-images (list (rectangle (* 1 WIDTH (/ (vcham-h ch) HMAX)) 50 "solid" "maroon")
                      (rectangle 1 1 "solid" "blue"))
                (list (make-posn 0 0) (make-posn 20 20))
                SCENE))

(render c)

我已经尽可能地简化了这段代码,因此是 1×1 矩形。我也对实现这一点的优雅替代方案感兴趣,但最感兴趣的是找出为什么会发生这种情况。

4

1 回答 1

3

place-images就像place-image

将图像放置到场景上,其中心位于坐标 (x,y) 并裁剪生成的图像,使其具有与场景相同的大小。坐标相对于场景的左上角。

您可以更改(make-posn 0 0)(make-posn 200 25),或尝试place-images/align

(define (render ch)
  (place-images/align (list (rectangle (* 1 WIDTH (/ (vcham-h ch) HMAX)) 50 "solid" "maroon")
                      (rectangle 1 1 "solid" "blue"))
                (list (make-posn 0 0) (make-posn 20 20))
                "left" "top" SCENE))
于 2020-06-16T20:01:20.773 回答