mirror of
https://github.com/dyne/FreeJ.git
synced 2026-02-11 23:30:50 +01:00
processing-js 0.4 has been merged in some relevant parts basic and topic scripts added for test color handling fixed, more scripts show up now
89 lines
1.8 KiB
Plaintext
89 lines
1.8 KiB
Plaintext
int numBalls = 12;
|
|
float spring = 0.05;
|
|
float gravity = 0.03;
|
|
Ball[] balls = new Ball[numBalls];
|
|
|
|
void setup()
|
|
{
|
|
size(200, 200);
|
|
noStroke();
|
|
smooth();
|
|
for (int i = 0; i < numBalls; i++) {
|
|
balls[i] = new Ball(random(width), random(height), random(20, 40), i, balls);
|
|
}
|
|
}
|
|
|
|
void draw()
|
|
{
|
|
background(0);
|
|
for (int i = 0; i < numBalls; i++) {
|
|
balls[i].collide();
|
|
balls[i].move();
|
|
balls[i].display();
|
|
}
|
|
}
|
|
|
|
class Ball {
|
|
float x, y;
|
|
float diameter;
|
|
float vx = 0;
|
|
float vy = 0;
|
|
int id;
|
|
Ball[] others;
|
|
|
|
Ball(float xin, float yin, float din, int idin, Ball[] oin) {
|
|
x = xin;
|
|
y = yin;
|
|
diameter = din;
|
|
id = idin;
|
|
others = oin;
|
|
}
|
|
|
|
void collide() {
|
|
for (int i = id + 1; i < numBalls; i++) {
|
|
float dx = others[i].x - x;
|
|
float dy = others[i].y - y;
|
|
float distance = sqrt(dx*dx + dy*dy);
|
|
float minDist = others[i].diameter/2 + diameter/2;
|
|
if (distance < minDist) {
|
|
float angle = atan2(dy, dx);
|
|
float targetX = x + cos(angle) * minDist;
|
|
float targetY = y + sin(angle) * minDist;
|
|
float ax = (targetX - others[i].x) * spring;
|
|
float ay = (targetY - others[i].y) * spring;
|
|
vx -= ax;
|
|
vy -= ay;
|
|
others[i].vx += ax;
|
|
others[i].vy += ay;
|
|
}
|
|
}
|
|
}
|
|
|
|
void move() {
|
|
vy += gravity;
|
|
x += vx;
|
|
y += vy;
|
|
if (x + diameter/2 > width) {
|
|
x = width - diameter/2;
|
|
vx += -0.9;
|
|
}
|
|
else if (x - diameter/2 < 0) {
|
|
x = diameter/2;
|
|
vx *= -0.9;
|
|
}
|
|
if (y + diameter/2 > height) {
|
|
y = height - diameter/2;
|
|
vy *= -0.9;
|
|
}
|
|
else if (y - diameter/2 < 0) {
|
|
y = diameter/2;
|
|
vy *= -0.9;
|
|
}
|
|
}
|
|
|
|
void display() {
|
|
fill(255, 204);
|
|
ellipse(x, y, diameter, diameter);
|
|
}
|
|
}
|