2017-02-05 4 views
0

Iは徐々にラインの組み合わせと円によって形成された画像を回転させることにより、簡単な揺動振り子をコーディングしようとしています:振り子が正しく片側に移動特異な振り子運動

(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'文は不要です。 – rnso

+0

良い点、私はそれを削除しました。 Re:pinholes:2htdp/imageでドキュメントを読んだのですか?私はそれについての質問には満足しています。 –