根据直径排列圆圈

时间:2020-01-14 05:33:57

标签: javascript geometry

我正在尝试将一些行星(圆形)排列成一条直线,以使它们轨道上的任何小行星(也就是圆形)都不会进入另一个行星的轨道。

这是完成行星放置的方式:

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);
}

这是该放置的结果:

Result

有时圆会重叠,有时圆会出现几个像素的偏离或它们之间的间隙很大。

行星位置不断更新,但为了调试,我禁用了它们的角度更新。我认为这段代码不会影响任何事情:

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;
}

1 个答案:

答案 0 :(得分:0)

新行星应放置一定距离

LeftPlanetRadius + RightPlanetRadius

而不是2 * LeftPlanetRadius距离
(请注意,您的右小轨道行星太远,而大轨道的行星将与左轨道重叠)

因此,您必须修改行星的创建-首先,您需要获取其半径以提供适当的位置