Как сгенерировать объект случайной позиции

#processing

#обработка

Вопрос:

Я пытаюсь сгенерировать 15 кругов на пространстве 1500 — 1000, каждый круг с разной позицией. Я знаю, как сгенерировать 1 случайный круг, но это все. Как я должен это сделать?

Комментарии:

1. Вы должны быть более конкретными. Полагаю, вы хотите создать 15 непересекающихся окружностей? Обратите внимание, что 2 окружности пересекаются, если расстояния между центральными точками меньше суммы радиусов.

2. Всего 15 кругов, случайным образом расположенных на экране, не имеет значения расстояние между ними.

3. Итак, в чем вопрос? Вы ищете массив -ы?

Ответ №1:

Похоже, вы ищете for цикл:

 for(int i = 0; i < 15; i  ){
  // draw a random circle here
}
  

Бесстыдная самореклама: вот руководство по for циклам обработки.

Ответ №2:

В принципе, вам нужно создать класс Circle и ArrayList, который содержит все ваши круги. Затем с помощью for вы добавляете в этот список 15 кругов, передающих конструктору случайные координаты и фиксированную ширину и высоту, которые вы выбираете.

 class Circle {
    float x, y, size;

    public Circle(float x, float y, float size) {
        this.x = x;
        this.y = y;
        this.size = size;
    }

    public void update() {
        ellipse(x, y, size, size);
    }
}
  

Объявите глобально свой ArrayList. Теперь в setup() вы создаете экземпляр своего ArrayList и заполняете его случайно сгенерированными координатами

 ArrayList<Circle> circlesList; // This needs to be declared globally
float circleSize = 64; // Circles size in pixels

void setup() {
    size(1500, 1000);

    circlesList = new ArrayList<Circle>();

    // Populating the ArrayList with circles
    for (int i = 0; i < 15; i  ) {
        float randomx = random(0, 1500); // Random generated X
        float randomy = random(0, 1000); // Random generated Y
        Circle newCircle = new Circle(randomx, randomy, circleSize);

        circlesList.add(newCircle);
    }
}
  

Теперь в draw() функции, используя цикл foreach, вы нарисуете каждый отдельный круг внутри этого ArrayList

 void draw() {
    background(255); // Background color

    fill(255, 0, 0); // Circle fill color
    for (Circle c : circlesList) {
        c.update();
    }
}
  

Пожалуйста, обратите внимание, что таким образом ваши круги могут перекрываться или находиться немного за пределами экрана. Спросите что-нибудь, если код неясен, не просто копируйте-вставляйте его.

Надеюсь, это помогло 🙂