整数の合同
提供:kuhalaboWiki
(版間での差分)
(→可視化) |
(→演算表) |
||
(1人の利用者による、間の1版が非表示) | |||
4行: | 4行: | ||
<pre> | <pre> | ||
− | + | int mod = 5; //法とする自然数 | |
size(500, 500); | size(500, 500); | ||
float scalar = (float) width / mod; //拡大比率 | float scalar = (float) width / mod; //拡大比率 | ||
24行: | 24行: | ||
<pre> | <pre> | ||
− | + | int mod = 5; //法とする自然数 | |
size(500, 500); | size(500, 500); | ||
float scalar = (float) width / mod; //拡大比率 | float scalar = (float) width / mod; //拡大比率 | ||
64行: | 64行: | ||
</pre> | </pre> | ||
− | |||
== 可視化 == | == 可視化 == | ||
120行: | 119行: | ||
} | } | ||
</pre> | </pre> | ||
+ | |||
+ | == リンク == | ||
+ | |||
+ | [[スケーラブルアート論]] | ||
+ | |||
+ | [[Category:授業]] |
2024年10月18日 (金) 09:19時点における最新版
[編集] 演算表
- 加法表の書き出し
int 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 = 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)乗に更新 } }