* | one | φ | K 3 | K 2 |
---|---|---|---|---|
one | one | φ | K 3 | K 2 |
φ | φ | 1-φ | K 2 | K 3 -K 2 |
K 3 | K 3 | K 2 | 3 + φ | 1 + 2φ |
K 2 | K 2 | K 3 -K 2 | 1 + 2φ | 2-φ |
<html><canvas id="a" width="640" height="320"></canvas><script> </script></html>
var canvas = document.getElementById("a"); var b = canvas.getContext("2d");
// function begin(){b.beginPath();} // function from(p) {b.moveTo(s[8] + p[0], s[9] - p[1]);} // function to(p){b.lineTo(s[8] + p[0], s[9] - p[1]);} // , function close(){b.closePath();} // function fill(color){b.fillStyle = color; b.fill();} // function line(){b.strokeStyle = "#444"; b.lineWidth = 0.5; b.stroke();} function line_white(){b.strokeStyle = "#fff"; b.lineWidth = 1; b.stroke();} function line_black(){b.strokeStyle = "#444"; b.lineWidth = 1.5; b.stroke();}
var s; function prepare() { var sqrt = Math.sqrt; var fi = (sqrt(5) - 1) / 2; var fb = (sqrt(5) + 1) / 2; var f3 = sqrt(3 + fi); var f2 = sqrt(2 - fi); // var vt = [[ 2, 0, 0, 0], [ 1, 1, 0, 1], [ 0, 1, 1, 0], [ 0,-1, 1, 0], [-1,-1, 0, 1], [-2, 0, 0, 0], [-1,-1, 0,-1], [ 0,-1,-1, 0], [ 0, 1,-1, 0], [ 1, 1, 0,-1]]; // var c = [1/2, fi/2, f3/2, f2/2] // // // . // // . var s = [0, vt, c, fi, f3, f2, 0, 0, 0, 0]; return s; } s = prepare(); s[0] = b; s[7] = 1; // s[8] = 500/2; // x s[9] = 320/2; // y
var f = []; // . f[0] = []; f[0].push([0,[ 0, 0, 0, 0],0]); f[0].push([1,[ 0, 0, 0, 0],0]); f[0].push([2,[ 0, 0, 0, 0],3]); f[0].push([3,[ 0, 0, 0, 0],3]); f[0].push([2,[ 0, 0, 0, 0],7]); f[0].push([3,[ 0, 0, 0, 0],7]);
fi = s[3]; // var levels = 3; // s[7] = 0.1 * 10; // s[10] = 24 * 6 * fi * fi; // //s[10] = 24 * 6 * fi //s[10] = 24 * 6; // , , p[0] p[1] from() to(). //s[10] = 24; mode = 12; // // var n = 0, m; for(; n < levels; n++) { m = n + 1; f[m] = []; for(var k = 0; k < f[n].length; k++) zd(f[n][k], s, f[m]); } // n = m - 1; // if(s[7] != 1) for(var i = 0; i < f[n].length; i++) {paint(f[n][i], mode, 1);} // for(var i = 0; i < f[m].length; i++) {paint(f[m][i], mode, 0);} // 11 if(mode == 11) {d = 3; for(var i = 0; i < f[md].length; i++) {paint(f[md][i], mode, d);}}
function zd(a, s, f) { var t = a[0]; // var vt = s[1]; // if (t > 3) t = t - 4; // 4 5 0 1 // , sht = [ 1,-1, 2,-2]; var shift = sht[t]; if(t == 0) {t1 = 0; t2 = 3; t3 = 5;} // else if(t == 1) {t1 = 1; t2 = 2; t3 = 4;} else if(t == 2) {t1 = 4; t2 = 2;} else if(t == 3) {t1 = 5; t2 = 3;} if (t < 2) { pos = a[1]; v1 = a[2]; // v2 = (v1 + shift + 10) % 10; // v3 = (v1 - shift + 10) % 10; // v4 = (v2 + 5) % 10; // v5 = (v1 + 5) % 10; // ( ) p1 = add(pos, vt[v2]); // p2 = add(p1, vt[v3]); // p3 = mul(p1,[2,2,0,0]); // p4 = mul(p2,[2,2,0,0]); // f.push([t1, p3, v4]); f.push([t2, p3, v3]); f.push([t3, p4, v5]); } else { pos = a[1]; v1 = a[2]; v2 = (v1 + shift + 10) % 10; // v3 = (v1 - shift + 10) % 10; // v4 = (v2 + 5) % 10; // v5 = (v3 + 5) % 10; // p1 = add(pos, vt[v2]); // p2 = add(p1, vt[v3]); // p3 = mul(p1,[2,2,0,0]); // p4 = mul(p2,[2,2,0,0]); // f.push([t1, p3, v4]); f.push([t2, p4, v5]); } return f; }
function mul(v1, v2) { mt = [[[1, 0, 0, 0],[0, 1, 0, 0],[ 0, 0, 1, 0],[ 0, 0, 0, 1]], [[0, 1, 0, 0],[1,-1, 0, 0],[ 0, 0, 0, 1],[ 0, 0, 1,-1]], [[0, 0, 1, 0],[0, 0, 0, 1],[-3, 1, 0, 0],[-1,-2, 0, 0]], [[0, 0, 0, 1],[0, 0, 1,-1],[-1,-2, 0, 0],[-2, 1, 0, 0]]] var v3 = [0, 0, 0, 0]; for(var i = 0; i < 4; i++) for(var j = 0; j < 4; j++) for(var k = 0; k < 4; k++) v3[k] = v3[k] + v1[i] * v2[j] * mt[i][j][k]; for(var i = 0; i < 4; i++) v3[i] = v3[i] / 2; return v3; } function add(v1, v2) { // , // . var v3 = [0, 0, 0, 0]; for(var i = 0; i < 4; i++) v3[i] = v3[i] + v1[i]; for(var i = 0; i < 4; i++) v3[i] = v3[i] + v2[i]; return v3; }
function mean(p1, p2, d) { var p3 = [(p2[0] - p1[0]) * d + p1[0],(p2[1] - p1[1]) * d + p1[1]]; return p3; }
function paint(a, mode, level = 0) { vt = s[1]; // c = s[2]; // fi = s[3]; // pr = s[7]; // b = s[0]; // var st = s[10]; // colors = ["#BCE","#BBE","#ECE","#EBE","#CEF","#EEF"]; type = a[0]; // tn = type; // 4 if(tn > 3) tn = tn - 4; // color = colors[type]; // , sht = [ 1,-1, 2,-2]; var shift = sht[tn]; p = a[1]; // v0 = a[2]; // v0 = (10 + v0 % 10) % 10; // 0-10 v1 = (10 + (v0 + shift) % 10) % 10; // v2 = (10 + (v0 - shift) % 10) % 10; // // . var kop = 0; var koe = 0; pr1 = 1 - pr; // . if(level == 0) {kop = st; koe = pr;} if(level == 1) {kop = st / fi; koe = pr1 / fi; } // if(level == 3) {kop = st / fi / fi / fi; koe = pr / fi / fi / fi; } // st = st * koe; // . // p0 = [kop * (p[0] * c[0] + p[1] * c[1]), kop * (p[2] * c[2] + p[3] * c[3])] // s1 = vt[v1]; p1 = [p0[0] + st * (s1[0] * c[0] + s1[1] * c[1]), p0[1] + st * (s1[2] * c[2] + s1[3] * c[3])]; // s2 = vt[v2]; p2 = [p1[0] + st * (s2[0] * c[0] + s2[1] * c[1]), p1[1] + st * (s2[2] * c[2] + s2[3] * c[3])]; // modes = [1, 1,1,1,1,1, 0,0,0,0,1, 1,1,1]; y = modes[mode]; // , if(level < 3) // , , 11 . if(y || mode == 0) { begin(); from(p0); to(p1); to(p2); close(); if(y) {fill(color);} if(mode == 0) line(); if(mode == 12) line_white(); } // if(mode == 1) { p3 = mean(p0, p2, 0.5); begin(); from(p0); to(p2); from(p1); to(p3); line_black(); } // , HBS if(mode == 2) { begin(); from(p1); to(p2); line(); } if(mode == 6) // { begin(); if(tn == 0 || tn == 2) { color = colors[tn * 2]; // p3 = mean(p0, p2, 0.5); p4 = mean(p1, p3, 2); from(p0); to(p1); to(p2); to(p4); close(); fill(color); } line(); } if(mode == 7) // { if(type == 0) { // p3 = mean(p0, p1, 1 + fi); p4 = mean(p2, p3, 1 + fi); begin(); from(p0); to(p1); to(p4); to(p2); close(); fill(colors[0]); line(); } if(type == 2) { // p3 = mean(p0, p2, 2 + fi) p4 = [p0[0] + (p2[0] - p1[0]), p0[1] + (p2[1] - p1[1])]; begin(); from(p0); to(p1); to(p3); to(p4); close(); fill(colors[4]); line(); } } if(mode == 8) // { if(type < 2) { begin(); from(p0); to(p1); to(p2); close(); fill(colors[0]); line(); } if(type == 4 || type == 5) { p3 = mean(p0, p1, 1 + fi); begin(); from(p0); to(p3); to(p2); close(); fill(colors[4]); line(); } } if(mode == 9) // { if(type == 0) { p3 = mean(p0, p1, 1 + fi); p4 = mean(p2, p3, 1 + fi); begin(); from(p0); to(p1); to(p4); to(p2); close(); fill(colors[0]); line(); } if(type == 2) { p3 = [p0[0] - p1[0] + p2[0], p0[1] - p1[1] + p2[1]]; begin(); from(p0); to(p1); to(p2); to(p3); close(); fill(colors[4]); line(); } if(type == 4) { p3 = mean(p2, p1, 1 + fi); p4 = mean(p0, p3, 1 + fi); begin(); from(p0); to(p4); to(p1); to(p2); close(); fill(colors[0]); line(); } } if(mode == 10) { p4 = mean(p1, p0, fi); p5 = mean(p0, p2, fi); p6 = mean(p2, p0, 1 / 2 + fi / 2); p7 = mean(p1, p2, 0.5); begin(); if(tn < 2) {from(p4); to(p5);} else {from(p6); to(p4);} to(p7); line(); } if(mode == 11) { k1 = 1 / 2; k2 = (fi + 1) / 2; k3 = (4 - fi) / 4; k4 = (fi + 1) / 4; k5 = (3 - 2 * fi) / 2; k6 = 1 / 4; if(tn < 2) { p3 = mean(p0, p2, k4); p4 = mean(p0, p1, k2); p5 = mean(p1, p2, k1); p6 = mean(p0, p2, k5); p7 = mean(p1, p2, k3); begin(); from(p3); to(p4); to(p5); to(p6); to(p7); } else { p3 = mean(p2, p1, k3); p4 = mean(p0, p1, k2); p5 = mean(p1, p2, k1); p6 = mean(p2, p0, k6); begin(); from(p3); to(p4); to(p5); to(p6); } line(); } }
Source: https://habr.com/ru/post/359244/
All Articles