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();
}
はだからp2
のorigin
がp1
のlocation
に設定setup
関数で、しかし、p2
のorigin
は、位置(0、0)に登場。だから私はこれをどのように修正すべきですか?私はp2
の一時変数を設定しようとしましたが、それは便利ではありません。
ctorでは、新しい 'PVector'を作成しますが、決して' origin_'をコピーしません。 https://processing.org/reference/PVector_copy_.html –
@JohnnyMopp 'location'はボールの位置です、' origin'はロープの始点ですから、同じではありません。 –