2017-02-05 15 views
0

我試圖通過逐漸旋轉由線和一個圓的組合形成的圖像進行編碼的簡單擺動擺:特有擺運動

(require 2htdp/image)  
(require 2htdp/universe) 

(define ang 0) 
(define x 1) 

(define pend 
    (underlay/xy (line 0 250 "black") 
       -10 250 
       (circle 10 "solid" "green"))) 

(define (simple_pendulum t)  
    (when (> (abs ang) 30) 
    (set! x (* x -1))) 
    (set! ang (+ ang x)) 
    (underlay/xy (rectangle 500 500 "solid" "white") 
       250 50 
       (rotate ang pend))) ; value of ang swings between -30 to +30 ; 

(animate simple_pendulum) 

雖然擺移動到一側適當地,它不這樣做所以在另一邊。而是擺擺動的基礎。錯誤在哪裏,我該如何糾正它?

請注意,我只是試圖以恆定速度從一端擺動鐘擺到另一端。我知道這不會是一個真正的鐘擺的物理準確的運動模式。

回答

0

這裏的問題是,在旋轉之後,您指示underlay/xy以這樣的方式繪製圖像,即擺圖像的左邊緣位於x座標250處。而且,正如您所看到的那樣,這正是它所做的;當鐘擺擺向左邊時,鐘擺的左邊緣總是在x座標250處。

那麼,如何解決呢?

你應該使用針孔。這就是我的意思:

#lang racket 
(require 2htdp/image)  
(require 2htdp/universe) 

(define ang 0) 
(define x 1) 

(define pend 
    (put-pinhole 
    10 0 
    (underlay/xy (line 0 250 "black") 
       -10 250 
       (circle 10 "solid" "green")))) 

(define (simple_pendulum t)  
    (when (> (abs ang) 30) 
    (set! x (* x -1))) 
    (set! ang (+ ang x)) 
    (clear-pinhole 
    (underlay/pinhole (put-pinhole 
         250 100 
         (rectangle 500 500 "solid" "white")) 

         (rotate ang pend)))) ; value of ang swings between -30 to +30 ; 

(animate simple_pendulum) 
+0

這完美的作品!針孔如何在這裏工作的簡要描述將非常有幫助。 – rnso

+0

pend函數定義之後的孤立'pend'語句似乎是不必要的。 – rnso

+0

好點,我刪除它。回覆:針孔:你讀過2htdp/image中的文檔嗎?我很樂意回答關於它的問題。 –