#005 random pattern

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 〜🥳

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA