素数螺旋

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;
}
♪よかったらシェアしてください♪
  • URLをコピーしました!
  • URLをコピーしました!
目次