金剛界曼荼羅
Processingで金剛界曼荼羅を塗り絵してみた。
float sqrt2 = sqrt(2); void setup() { size(720, 720); smooth(); fill(0,0,120); rect(10,10,230,230); fill(0,0,120); rect(245,10,230,230); fill(0,120,0); rect(265,30,190,190); fill(0,0,120); rect(480,10,230,230); fill(0,120,0); rect(500,30,190,190); fill(240,240,0); rect(10,245,230,230); fill(0,120,0); rect(30, 265, 190, 190); fill(240,240,0); rect(245,245,230,230); fill(0,120,0); rect(265, 265, 190, 190); fill(240,240,0); rect(480,245,230,230); fill(0,120,0); rect(500, 265, 190, 190); fill(240,240,0); rect(10,480,230,230); fill(0,120,0); rect(30, 500, 190, 190); fill(240,240,0); rect(245,480,230,230); fill(0,120,0); rect(265, 500, 190, 190); fill(240,240,0); rect(480,480,230,230); fill(0,120,0); rect(500, 500, 190, 190); world(125, 125, 190); fill(20); rect(280, 45, 160, 160); fill(240,240,200); ellipse(360, 125, 160, 160); risyu(595, 125, 160); world(125, 360, 160); world(360, 360, 160); world(595, 360, 160); world(125, 595, 160); world(365, 595, 160); world(595, 595, 160); } void world(float x, float y, float w) { fill(0, 0, 40); rect(x - w / 2, y - w / 2, w, w); fill(0, 100, 40); ellipse(x, y, w, w); float innerW = w / 3; fill(240,240,200); ellipse(x, y, innerW, innerW); fill(240,240,200); ellipse(x, y - innerW, innerW, innerW); ellipse(x, y + innerW, innerW, innerW); ellipse(x - innerW, y, innerW, innerW); ellipse(x + innerW, y, innerW, innerW); float a = (sqrt2 - 1) / (sqrt2 + 1); float w2 = a * w; fill(240, 0, 0); ellipse(x - (w - w2) /2, y - (w - w2) / 2, w2, w2); ellipse(x + (w - w2) /2, y - (w - w2) / 2, w2, w2); ellipse(x - (w - w2) /2, y + (w - w2) / 2, w2, w2); ellipse(x + (w - w2) /2, y + (w - w2) / 2, w2, w2); float b = (3 - sqrt2) / 6 / (sqrt2 + 1); float w3 = b * w; fill(240,240,200); ellipse(x - w / 6 - w3 , y - w / 6 - w3 , w3 * 2, w3 * 2); ellipse(x + w / 6 + w3 , y - w / 6 - w3 , w3 * 2, w3 * 2); ellipse(x - w / 6 - w3 , y + w / 6 + w3 , w3 * 2, w3 * 2); ellipse(x + w / 6 + w3 , y + w / 6 + w3 , w3 * 2, w3 * 2); } void risyu(float x, float y, float w) { fill(0, 0, 40); rect(x - w / 2, y - w / 2, w, w); float innerW = w / 3; fill(240,240,200); ellipse(x - innerW, y - innerW, innerW, innerW); ellipse(x, y - innerW, innerW, innerW); ellipse(x + innerW, y - innerW, innerW, innerW); ellipse(x - innerW, y, innerW, innerW); ellipse(x, y, innerW, innerW); ellipse(x + innerW, y, innerW, innerW); ellipse(x - innerW, y + innerW, innerW, innerW); ellipse(x, y + innerW, innerW, innerW); ellipse(x + innerW, y + innerW, innerW, innerW); }