2020_0810
こんにちは。センバクです。
今回は、単純な形(丸、四角、六角、線)を組み合わせて模様をつくる作品を作りました。思いの外いろいろなものができて面白いです。応用すると、雪の結晶のような模様も作れそうです。
↓コードはこちらです。今回のは少し読みにくくなってしまった気がします。
6角形の書き方は、@reona396さんのブログ記事を参考にさせていただきました。http://blog.livedoor.jp/reona396/archives/55768147.html
ランダムに色をチョイスする書き方は、以前 CHE YU WUさん(https://www.openprocessing.org/user/139364) が書かれていたものを参考にしています。とてもスマートな書き方で、好きです。
//2020-08_09 @senbaku
function setup() {
createCanvas(600, 600);
noLoop();
angleMode(DEGREES);
}
function draw() {
background(51);
strokeCap(ROUND);
//color------------
//color choice method by@CHE YU WU
let colors = "25ced1-ffffff-fceade-ff8a5b-ea526f-6b2d5c-f0386b-ff5376-f8c0c8-e2c290".split("-").map(a => "#" + a)
let cc = color(random(colors))
stroke(cc);
//tile--------------
let count = 5;
let s = width / count;
for (let i = 0; i < count; i++) {
for (let j = 0; j < count; j++) {
noFill()
katachi(i * s, j * s, s);
katachi(i * s, j * s, s);
}
}
}
function katachi(x, y, s) {
let hs = s / 3;
let center = s / 2;
let outellipse = random(s - s / 5, hs);
let rad = random(hs / 10, hs / 2);
let linelength = random(0, -hs);
let linelength2 = random(0, -hs);
push();
translate(x + center, y + center);
strokeWeight(1);
rectMode(CENTER);
//line--------------
for (let i = 0; i < 360; i += 360 / 6) {
push();
rotate(i);
line(0, linelength, 0, linelength2);
pop();
}
//other shapes---------
let a = int(random(5));
if (a == 3) { //6-ellipse
noFill();
beginShape();
let r = random(hs / 5, hs);
for (let i = 0; i < 6; i++) {
let theta = i * 360 / 6;
let x = r * cos(theta);
let y = r * sin(theta);
ellipse(x, y, rad);
}
endShape(CLOSE);
}
if (a == 3) { //hexagon
noFill();
beginShape();
let r = random(hs / 5, hs);
for (let i = 0; i < 6; i++) {
let theta = i * 360 / 6;
let x = r * cos(theta);
let y = r * sin(theta);
vertex(x, y);
}
endShape(CLOSE);
}
if (a == 2) {
push();
rotate(45);
noFill();
rect(0, 0, hs);
pop();
}
if (a == 1) {
noFill();
rect(0, 0, outellipse);
}
if (a == 0) {
noFill();
ellipse(0, 0, outellipse);
}
pop();
}
happy coding 〜🥳