(ОБНОВЛЕНИЕ) Я хочу нарисовать круги внутри кругов, которые становятся все меньше и меньше на 10 пикселей в диаметре, которые расположены вокруг кольца - PullRequest
0 голосов
/ 06 апреля 2019

Итак, моя конечная цель - нарисовать 50 кругов (с processing.core.PApplet), структурированных вокруг кольца, которое меняет цвет как неоновая вывеска так, чтобы это выглядело как психоделика. Круги должны быть случайных размеров и с диаметромменее 210 пикселей у кругов должно быть 8 полосок, в которых каждая «оболочка» меняет цвет по порядку, а в центре должен быть пустой кружок того же цвета, что и фон.Прямо сейчас я пытаюсь разбить эту проблему на множество мелких проблем, и в настоящее время я изо всех сил стараюсь сделать промежутки между столбцами одинаково разнесенными.Culprit: (Я обнаружил, что проблема заключается в соотношении между размером стержня и размером круга, из-за неопределенного диапазона случайного размера, который он казался пустыми кругами)

Вот моя следующая проблема, круги кажутсявибрируя, вместо того, чтобы оставаться статичным, я хочу, чтобы 50 кругов были статичными, а цвета на каждой оболочке меняются в каждом кадре.

Вот та часть, где я говорю, чтобы она рисовала все меньшие и меньшие круги.«Компонент рисования»

public Donut(float x, float y , float d) { //constructor
this.x =x;
this.y =y;
    diameter=d;
}
 public void draw(PApplet p) {      
    p.circle(x, y, diameter);
    float bar=(float)(Math.random()*(1-10)-1)+1;
    for(int i =0; i<8; i++) {
    bar+=10;
    p.fill(REDS[i],GREENS[i],BLUES[i]);
    p.circle(x, y, diameter-bar);
    }
}

И вот часть, где я говорю, чтобы она имела произвольные размеры и позиции (пока еще не сказал, чтобы она была размещена вокруг кольца) // Это основной класс

 public class Psychadelics extends PApplet{
Donut [] DonutList = new Donut [50];
public static void main(String[] args) {
    PApplet.main("test.Psychadelics");
}
public void settings() {
    size(SCR_W, SCR_H);
}
public void setup() {
for(int i =0; i<DonutList.length;i++) {
    float x = (float)(Math.random()*600);
    float y = (float)(Math.random()*400);
    float diameter = (float)(Math.random()*210);
  DonutList [i]= new Donut(x,y,diameter);
}

У меня есть другой метод рисования внутри основного класса, чтобы сказать классу Donut продолжать рисовать и обновлять его.

Я ожидаю, что каждыйкруг, чтобы оставаться статичным и переходить цвета, каждый кадр, но мои фактические результаты были круги каждый с разными цветами на каждой оболочке, вибрируя в указанных координатах

1 Ответ

0 голосов
/ 06 апреля 2019

Вибрация вызвана float bar=(float)(Math.random()*(1-10)-1)+1;. Поскольку bar определяется внутри функции рисования, точный диаметр будет немного отличаться на каждом кадре. Вместо этого вы должны создать массив этих случайных чисел в конструкторе и использовать random_diameter[i] в цикле рисования, чтобы размеры внутренних кругов создавались случайными, но оставались постоянными.

Оставшийся постоянный цвет вызван p.fill(REDS[i],GREENS[i],BLUES[i]);. Вы назначаете определенные цвета, основанные на индексе, кругу, который также основан на индексе. Это где вы должны использовать случайный. Для красного, зеленого и синего используйте int(Math.random(0,255));. Таким образом, в каждом кадре для каждого круга генерируется случайный цвет. Если вы хотите более постепенного изменения цвета, вам нужно сохранить цвет для каждого круга и добавить / вычесть небольшое случайное число. Если вы хотите ограничить количество цветов, вы можете использовать имеющуюся у вас функцию, но вместо i используйте случайное число с размером массива.

Надеюсь, вы видите, что, что интересно, проблемы / решения друг друга противоположны :)

...