2016-01-24 63 views
1

我想設計一個名爲add-frame的函數,它需要一個圖像,並在所有四邊都用一個像素的黑色邊框包圍它。這裏是我所擁有的:覆蓋在方案(球拍)

(define (horizontal-line x) 
(line x 0 "black")) 

(define (vertical-line x) 
(line 0 x "black")) 

(define (add-left-border height design color) 
    (overlay/align "left" "top" 
       (vertical-line height) 
       (square height design color))) 

(define (add-right-border height design color) 
    (overlay/align "right" "top" 
       (vertical-line height) 
       (square height design color))) 

(define (add-top-border height design color) 
    (overlay/align "right" "top" 
       (horizontal-line height) 
       (square height design color))) 

(define (add-bottom-border height design color) 
    (overlay/align "right" "bottom" 
       (horizontal-line height) 
       (square height design color))) 

(define (add-frame height design color) 
    (overlay (square height design color) 
      (add-left-border height design color) 
      (add-right-border height design color) 
      (add-top-border height design color) 
      (add-bottom-border height design color))) 

當我運行「添加框架」時,我返回一個帶有左邊框的正方形圖像。如何讓邊框的其餘部分出現在返回的廣場上?

+0

您可以點擊標籤下方的「編輯」按鈕編輯您的帖子。 –

+0

出於好奇,這是一個功課題嗎? –

+0

如何定義「垂直線」和「水平線」? (我無法讓你的程序運行) – soegaard

回答

1

該表達

(overlay/align "left" "top" 
       (vertical-line height) 
       (square height design color)) 

垂直線正確地添加到一個正方形的左側。

而這種表達

(overlay/align "right" "top" 
       (vertical-line height) 
       (square height design color)) 

將正確的垂直線添加到一個正方形的右側。

但是,如果您將兩個圖像放在一起 - 然後 ,因爲它們的大小相同,您只能看到最上面的一個。

要解決此問題(部分),您可以在正方形的另一側添加透明的 線。

更好的解決方案是將圖像上的行添加到 。

也就是說變化,比如說,add-left-border到:

(define (add-left-border height design color image) 
    (overlay/align "left" "top" 
       (vertical-line height) 
       image)) 

這將增加對圖像的頂部的左邊框。

事情是這樣的:

(define (horizontal-line x) 
    (line x 1 "black")) 

(define (vertical-line x) 
    (line 1 x "black")) 

(define (add-left-border height design color image) 
    (overlay/align "left" "top" 
       (vertical-line height) 
       image)) 

(define (add-right-border height design color image) 
    (overlay/align "right" "top" 
       (vertical-line height) 
       image)) 

(add-left-border 80 "solid" "red" 
       (add-right-border 80 "solid" "red" 
            (circle 40 "solid" "red"))) 

注:這是更好地爲自動獲得正確尺寸的圖像上使用image-widthimage-height

+0

我可以得到單獨的左右行顯示在廣場上。我無法讓他們同時出現。 – Brett

+0

@佈雷特嗨佈雷特我已經添加了部分解決方案。 – soegaard