整数の合同

提供:kuhalaboWiki
移動: 案内, 検索

演算表

加法表の書き出し
nt mod = 5;  //法とする自然数
size(500, 500);
float scalar = (float) width / mod; //拡大比率
for (int i = 0; i < mod; i++){
  for (int j = 0; j < mod; j++){
    int num = (i + j) % mod;  //数の計算
    PVector v = new PVector(j, i);  //マスの位置
    v.mult(scalar);
    fill(255);  //マスを白くする
    rect(v.x, v.y, scalar, scalar); //マスの描画
    fill(0);  //数字を黒くする
    textSize(scalar);
    text(num, v.x, v.y + scalar);  //数字の表示
  }
}
乗法表の書き出し
nt mod = 5;  //法とする自然数
size(500, 500);
float scalar = (float) width / mod; //拡大比率
for (int i = 0; i < mod; i++){
  for (int j = 0; j < mod; j++){
    int num = (i * j) % mod;  //乗法表の場合
    PVector v = new PVector(j, i);  //マスの位置
    v.mult(scalar);
    fill(255);  //マスを白くする
    rect(v.x, v.y, scalar, scalar); //マスの描画
    fill(0);  //数字を黒くする
    textSize(scalar);
    text(num, v.x, v.y + scalar);  //数字の表示
  }
}


べき乗法表の書き出し
int mod = 7;
size(500, 500);
float scalar = (float) width / (mod - 1);
int num;
for (int i = 1; i < mod; i++){
  num = i;  //iの1乗
  for (int j = 1; j < mod; j++){
    PVector v = new PVector(j - 1, i - 1);  //マスの位置
    v.mult(scalar);
    fill(255);
    rect(v.x, v.y, scalar, scalar); //マスを描画
    fill(0);
    textSize(scalar);
    text(num, v.x, v.y + scalar); //iのj乗をマスに表示
    num = (num * i) % mod;  //numをiの(j+1)乗に更新
  }
}


可視化

数値を色相と直径に適用
加法と乗法
int mod = 17;  //法とする自然数
size(500, 500);
colorMode(HSB, 1);
background(0, 0, 1);
float scalar = (float) width / mod;
for (int i = 0; i < mod; i++){
  for (int j = 0; j < mod; j++){
    //int num = (i + j) % mod;  //数の計算
    PVector v = new PVector(j + 0.5, i + 0.5);  //円の中心位置
    v.mult(scalar);
    int num = (i * j) % mod;  //乗法表の場合
    // 色相に対応
    fill(num * 1.0 / mod, 1, 1);  //数を円の色相に対応
    noStroke();
    ellipse(v.x, v.y, scalar / 2, scalar / 2);
    // 円の大きさに対応
//    fill(0, 0, 0);
//    ellipse(v.x, v.y, scalar * num / mod, scalar * num / mod);  //数を円の直径に対応
  }
}

べき乗

int mod = 37;
size(500, 500);
colorMode(HSB, 1);
background(0, 0, 1);
float scalar = (float) width / (mod - 1);
int num;
for (int i = 1; i < mod; i++){
  num = i;
  for (int j = 1; j < mod; j++){
    PVector v = new PVector(j - 0.5, i - 0.5);  //円の中心位置
    v.mult(scalar);
    // 色相に対応
    fill(num * 1.0 / mod, 1, 1);
    noStroke();
    ellipse(v.x, v.y, scalar / 2, scalar / 2);
    // 円の大きさに対応
    fill(0, 0, 0);
    ellipse(v.x, v.y, scalar * num / mod, scalar * num / mod);
    num = (num * i) % mod;  //numをiの(j+1)乗に更新
  }
}

リンク

スケーラブルアート論

個人用ツール
名前空間

変種
操作
案内
ツールボックス