2016-05-02 12 views
0

私は​​という本を読んでいました。ここでは、運動3.12が私に二重振り子の実装を依頼しました。2番目のボールの起点が1番目のボールに付いていないのはなぜですか?

class Pendulum { 

    PVector origin, location; 

    float r; // arm length 
    float angle; 
    float aVelocity; 
    float aAcceleration; 
    float damping; 

    Pendulum(PVector origin_, float r_) { 
    origin = origin_.get(); 
    location = new PVector(); 
    r = r_; 
    angle = PI/3; 
    aVelocity = 0; 
    aAcceleration = 0; 
    damping = 0.995; 
    } 

    void go() { 
    update(); 
    display(); 
    } 

    void update() { 
    float gravity = 0.4; 
    aAcceleration = (-1 * gravity/r) * sin(angle); 
    aVelocity += aAcceleration; 
    angle += aVelocity; 
    aVelocity *= damping; 
    location.set(r*sin(angle), r*cos(angle)); 
    location.add(origin); 
    } 

    void display() { 
    stroke(0); 
    line(origin.x, origin.y, location.x, location.y); 
    fill(150); 
    ellipse(location.x, location.y, 20, 20); 
    } 
} 

Pendulum p, p2; 

void setup() { 
    size(640, 360); 
    p = new Pendulum(new PVector(width/2, 0), 150); 
    p2 = new Pendulum(p.location, 100); 
} 

void draw() { 
    background(255); 
    p.go(); 
    p2.go(); 
} 

はだからp2originp1locationに設定setup関数で、しかし、p2originは、位置(0、0)に登場。だから私はこれをどのように修正すべきですか?私はp2の一時変数を設定しようとしましたが、それは便利ではありません。

+0

ctorでは、新しい 'PVector'を作成しますが、決して' origin_'をコピーしません。 https://processing.org/reference/PVector_copy_.html –

+0

@JohnnyMopp 'location'はボールの位置です、' origin'はロープの始点ですから、同じではありません。 –

答えて

2

私は、あなたがやろうとしているかを正確にわからないんだけど なく、コンストラクタで:

Pendulum(PVector origin_, float r_) { 
    origin = origin_.get(); 
    location = new PVector(); <-- here you set the location to a new vector 
    ... 
} 

そして、あなたは直接ここに場所を使用します。

void setup() { 
    size(640, 360); 
    p = new Pendulum(new PVector(width/2, 0), 150); 
    p2 = new Pendulum(p.location, 100); <-- here 
} 

新しいあります場所が作成されました。私はあなたが探しているべきあなたの問題だと思います。

関連する問題