Что делает мое изображение вдвое меньшим, чем предполагалось? - PullRequest
2 голосов
/ 16 июня 2020

Я пытаюсь разместить вертикально расположенный прямоугольник и другой объект на пустой сцене, используя изображения мест на языке для начинающих студентов. Однако, когда я запускаю функцию, прямоугольник занимает только половину сцены по горизонтали, если его ширина установлена ​​равной ширине сцены.

Я проверил, что происходит с моим кодом с помощью Stepper, и нашел, где изображение -ширина вполовину но не знаю почему. Вероятно, дело в минусах, с которыми я не очень хорошо знаком. between these two steps the width halves

Вот полный код:

(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. Меня также интересуют элегантные альтернативы для реализации этого, но больше всего мне интересно узнать, почему это происходит.

1 Ответ

3 голосов
/ 16 июня 2020

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