我试图使用初学者语言中的 place-images 将一个垂直定位的矩形和另一个对象放置在一个空场景上。然而,当我运行该函数时,当矩形的宽度被设置为等于场景的宽度时,它只在水平方向上占据了一半的场景。
我用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的矩形。我也对优雅的替代方案感兴趣,但最感兴趣的是找出为什么会发生这种情况。
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))