public static final int num = 360;//線の個数 boolean drawFlag = true; //描画負荷が高いため、毎フレーム描画しないよう、フラグ形式にする //現在の位置 float posX[]=new float[num], posY[]=new float[num]; //過去の位置 float beforePosX[]=new float[num], beforePosY[]=new float[num]; //方向 float angle[] = new float[num]; //ステップ float step[] = new float[num]; void setup() { size(400, 400); noiseSeed(39);//ノイズの種を設定して初回起動時に同じノイズを生成する //各値を初期化 for (int i = 0; i < num; i++) { angle[i] = random(1, 5); step[i] = random(1, 5); posX[i] = 0; posY[i] = 0; beforePosX[i] = posX[i]; beforePosY[i] = posY[i]; } } void draw() { if (!drawFlag) { return; } else { drawFlag = false; } background(255); translate(width/2, height/2);//中心を原点とする //一度ずつ回転させながら線を描画 for (int i = 0; i < num; i++) { rotate(radians(i)); drawLine(i); } } void drawLine(int number) { float scale = 300; for (int i = 0; i < 100; i++) { angle[number] = noise(posX[number]/scale, posY[number]/scale) * 10;//現在位置を元に角度を計算 //オブジェクトの位置を算出 posX[number] += cos(angle[number])*step[number]; posY[number] += sin(angle[number])*step[number]; //線を描画 line(beforePosX[number], beforePosY[number], posX[number], posY[number]); //前の値を格納 beforePosX[number] = posX[number]; beforePosY[number] = posY[number]; } } void mousePressed() { drawFlag = true; noiseSeed((int)random(200));//ノイズの種をランダムにセット //各パラメータのリセット for (int i = 0; i < num; i++) { angle[i] = 3.0; step[i] = random(1, 5); posX[i] = 0; posY[i] = 0; beforePosX[i] = posX[i]; beforePosY[i] = posY[i]; } }