ここで、gamedev.stackexchangeのユーザーから、オブジェクトを別のオブジェクトの周りに周回させる方法のprocessing.jsの例が提供されました。
基本的に、この例では、原点または中心が軌道点の座標とともに確立されます。
// Logic vars
PVector origin;
float orbitRadius = 75.0;
PVector orbitVelocity;
PVector orbitPoint;
float t = 0.0;
float fps = 60.0;
float constDT = 1 / fps;
次に、セットアップで初期化されます。
void setup() {
size(400, 400);
frameRate(fps);
/*central point */
origin = new PVector(width / 2.0, height / 2.0);
/*first point and velocity of orb around center*/
orbitVelocity = new PVector(0.0, /*-orbitRadius*/orbitRadius);
orbitPoint = new PVector(origin.x + orbitRadius, origin.y);
}
そして、軌道点の座標はタイムステップごとに更新されます。
void update(float dt) {
/*update orbit of first orb using velocity*/
PVector accelerationTowardsOrigin = PVector.sub(origin, orbitPoint);
orbitVelocity.add(PVector.mult(accelerationTowardsOrigin, /*dt*/constDT));
orbitPoint.add(PVector.mult(orbitVelocity, /*dt*/constDT));
}
(関連性がないため、描画コードを省略しました。)コードを更新して、軌道を回る楕円を追加しようとしています。これは、ここで確認できます。これらの追加の変数を追加することにより、中心点の周りの軌道に沿って2番目の点を正常に追加することができました。
/*Logic vars for second point on circle*/
PVector orbitPoint2;
PVector orbitVelocity2;
float circAngle;
float xcoord_along_circle;
float ycoord_along_circle;
そしてこれをセットアップに追加します:
//Added in setup
/*second orbiting point for second orb*/
/*Calculate second point along circle*/
circAngle = 90.0;
xcoord_along_circle = orbitRadius * cos(circAngle) + origin.x;
ycoord_along_circle = orbitRadius * sin(circAngle) + origin.y;
/*second point and velocity of orb around center*/
orbitVelocity2 = new PVector(xcoord_along_circle,orbitRadius);
orbitPoint2 = new PVector(xcoord_along_circle, ycoord_along_circle);
ただし、2番目の楕円の座標を各ポイントで更新すると、軌道が引き伸ばされ、引き伸ばされます。
/*update orbit of second orb using velocity*/
PVector accelerationTowardsOrigin2 = PVector.sub(origin,orbitPoint2);
orbitVelocity2.add(PVector.mult(accelerationTowardsOrigin2,/*dt*/constDT));
orbitPoint2.add(PVector.mult(orbitVelocity2, /*dt*/constDT));
私はすべてを正しく行い、必要な手順を複製していると信じています。軌道が歪まないようにこれを修正するにはどうすればよいですか?