Stanislaw Ulam 的な、あれ。Processing 初挑戦。めっちゃ楽しい。
int k;
int w = 14999; //素数判定の最大値
float[] R = new float[w];
float[] G = new float[w];
float[] B = new float[w];
float x;
float y;
float angle = 0.0;
float radius = 10;
float scalar = 10;
float speed = 0.05;
void setup () {
size(1280, 720);
background(0, 0); //2番目の"0"は不透明度だが効果なし
noStroke();
for (int i = 0; i < w; i++) {
R[i] = random(128, 255); //暗い背景で利用するので明るめの色になるように設定
G[i] = random(128, 255);
B[i] = random(128, 255);
}
}
void draw () {
if (isPrime(k + 1) == true) {
x = width / 2 + cos(angle) * scalar;
y = height / 2 + sin(angle) * scalar;
fill(R[k], G[k], B[k]);
ellipse (x, y, radius, radius);
}
saveFrame("frames/######.png"); //アニメ作成用静止画の保存
angle += speed;
scalar += speed;
if (k < w) {
k++;
println(frameCount); //アニメ作成用静止画のファイル数
} else {
exit();
}
}
//素数の判定(エラトステネスの篩【ではない】ことに注意)
boolean isPrime(int num) {
if (num == 0 || num == 1) {
return false;
}
for (int i = 2; i <= sqrt(num); i++) {
if(num % i == 0) {
return false;
}
}
return true;
}