2015-01-22 6 views
1
class loc { 
float[] x; 
float[] y; 
float v_o_x, v_o_y; 

float[] locationx = new float[0]; 
float[] locationy = new float[0]; 

loc(float x_o, float y_o, float v_o, float theta, int t_end) { 

theta = radians(theta); 

v_o_x = v_o_x = v_o * cos(theta); 

v_o_y = abs(v_o) * sin(theta); 

for (int i=0; i<t_end; i++) { 
    locationx = append(locationx, (v_o_x * i + x_o)); 
    locationy = append(locationy, (0.5*10*pow(i, 2) - v_o_y*i + y_o)); 
} 

this.x = locationx; 
this.y = locationy; 
} 
} 

loc locations; 

int wait = 75; // change delay between animation 
int i = 0; 
int j = 0; 

float randV = random(-70, 70); 
float randAng = random(30, 50); 

int len = 17; 

void setup() { 

    size(1500, 800); 

    background(255); 
} 

void draw() { 


    fill(0); 


    int d = 20; // diameter 

    float[] xx, yy; 

    if (i < len) { 

    locations = new loc(width/2, height/3.5, randV, randAng, len); 

    xx = locations.x; 
    yy = locations.y; 

    //background(255); 
    rect(width/2-d, height/3.5+d, d*2, d*2); 

    float s = 255/locations.x.length; 
    fill((0+i*s)); 
    ellipse(xx[i], yy[i], d, d); 

    i += 1; 

    delay(wait); 
    } else { 
    randV = random(-70, 70); 
    randAng = random(30, 50); 
    i = 0; 
    } 
} 

У меня есть простой код, написанный, который анимирует траекторию шара для случайного начального угла и скорости. По мере того как он в настоящее время бежит, он вышлет один мяч, дождитесь его приземления, а затем отправить другой случайный шар. Мои надежды состоят в том, чтобы заставить его одновременно отправить несколько случайных шаров, чтобы создать своего рода эффект фонтана. У меня было много проблем, чтобы сделать это, какие-нибудь предложения?Обработка: одновременный рисунок случайных траекторий частиц

ответ

2

Прямо сейчас у вас есть переменные, которые представляют позицию (и прошлые позиции) одного шара. Ради вопроса, я проигнорирую на секунду, что вы никогда не использовали некоторые из этих переменных.

Вы можете скопировать все эти переменные и повторить их для каждого шара, который вы хотите. У вас были бы ballOneLocations, ballTwoLocations и т. Д.

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

Тогда все, что вам нужно сделать, это создать массив или экземпляр ArrayList of Ball и пропустить их, чтобы обновить и нарисовать их.

Here - это учебное пособие по использованию ООП в обработке для создания нескольких шаров, отскакивающих вокруг экрана.

2

Согласовано с Kevin Workman, классы - это путь сюда. Один из лучших ресурсов для этого материала - Daniel Shiffman, особенно его книга Nature of Code. Ваш вопрос рассматривается в главе «Системы частиц» (глава 4).

Смежные вопросы