画像とソースコードは参照サイト様からの引用。
ソースコードに理解用のコメントを自分で加えています。

クモみたい。以下はソースコード(そのまま動く)。
//思ったこと
//オブジェクトの動的配列はArrayListで。
//オブジェクトがどんどん増えて重くなるのが欠点か。
//random(-2,3);でバランスが取れている理由は?((-3,3)とするとアンバランスになる)
//コメントはコードから1タブおいて、//コメント。
//for()の中はキチキチ(塊で見るからそれがいいらしい)
//if()の中もキチキチ
//カオスな動きはgetX(), getY()から生まれている
//ちなみにピクセル処理をするときloadPixels(), pixels[], updatePixels()を使うのは基本(速い)
ArrayList aPoints; //配列の宣言
void setup() { //初期設定
frameRate(120); //フレームレート
size(640,480,P3D); //ステージサイズの設定
background(255); //ステージの背景色
aPoints = new ArrayList(); //PointObject格納用配列
}
void draw() { //この関数をループします
aPoints.add(new PointObject()); //新しいPointObjectを作成して配列に格納
//
loadPixels(); //ピクセルを処理する前のおまじない
for (int i=0;i<aPoints.size();i++) {
PointObject po = (PointObject) aPoints.get(i); //i番目のオブジェクトを取り出す
po.update();//座標更新
int xx = po.getX();
int yy = po.getY();
if (xx<0||xx>=width||yy<0||yy>=height) { //PointObjectの位置が端まで来ていたら
aPoints.remove(i); //PointObjectを削除
} else {
pixels[xx+yy*width] = color(0,0,0); //座標(x,y)を黒く塗る
}
}
updatePixels(); //ピクセルへの処理を反映させるためのおまじない
}
class PointObject { //PointObjectクラス
int xx;
int yy;
float ss;
float dss;
float vx;
float vy;
float rr;
PointObject() { //コンストラクタ 初期設定
xx = width/2;
yy = height/2;
vx = random(-2,3);
vy = random(-2,3);
ss = 0;
dss = PI/random(-36,36)/4;//-20~20度(ほぼ-0.3~0.3) //ぐるんぐるん度
rr = random(20,80);//半径
}
void update() { //座標情報の更新
xx+=vx;
yy+=vy;
ss+=dss;
rr+=(0-rr)/50;//半径減衰
}
int getX() { //X座標を返す
return int(xx+cos(ss)*rr);
}
int getY() { //Y座標を返す
return int(yy+sin(ss)*rr);
}
}