我正在尝试将一些行星(圆形)排列成一条直线,以使它们轨道上的任何小行星(也就是圆形)都不会进入另一个行星的轨道。
这是完成行星放置的方式:
let distance = 0;
for (let index = 0; index < 3; index++) {
const created = new planet(this, distance);
this.planets.push(created);
const diameter = created.getDiameter();
distance += diameter;
}
行星的直径是半径最大的小行星的直径:
getDiameter() {
const furthest = this.asteroids.reduce((previous, current) => {
return (previous.radius > current.radius) ? previous : current;
});
return 1 + ceil(2 * furthest.radius);
}
这是该放置的结果:
。
有时圆会重叠,有时圆会出现几个像素的偏离或它们之间的间隙很大。
行星位置不断更新,但为了调试,我禁用了它们的角度更新。我认为这段代码不会影响任何事情:
setPosition() {
const rads = radians(this.angle);
this.position.x = (this.radius * cos(rads)) + this.star.position.x;
this.position.y = (this.radius * sin(rads)) + this.star.position.y;
}
答案 0 :(得分:0)
新行星应放置一定距离
LeftPlanetRadius + RightPlanetRadius
而不是2 * LeftPlanetRadius
距离
(请注意,您的右小轨道行星太远,而大轨道的行星将与左轨道重叠)
因此,您必须修改行星的创建-首先,您需要获取其半径以提供适当的位置