memoscan
← all memos

Memo 0x727a91d1…e23595 on Ethereum

andom_dec()) / 1.5); } } } } else if (cfg.style == 2) { // curvy threads let angle, n, nst = 100, dx, dy, step = pt/5; for (let i = 0; i < 10000; i++) { let xstart = mrgn + rnd.random_dec() * ww, ystart = mrgn + rnd.random_dec() * wh, len = rnd.random_int(50, 100); for (let j = 0; j < len; j++) { n = noise(nst * (xstart / w), nst * (ystart / h)); angle = n * 2 * Math.PI; dx = step * Math.cos(angle); dy = step * Math.sin(angle); xstart += dx; ystart += dy; if (rnd.random_dec() < 0.1) { ellipse(xstart, ystart, pt * (1 + rnd.random_dec()) / 1.5); } } } } else if (cfg.style == 3) { // curvy graphs if ("gap" in cfg == false) cfg.gap = ww / rnd.random_choice([50, 100]); if ("round" in cfg == false) cfg.round = rnd.random_choice([-1, 2, 4, 8]); let x_start, y_start, angle, n, nst, dx, dy, step = pt/10; for (let i = mrgn; i <= mrgn + ww; i += cfg.gap) { x_start = i; nst = 5; for (y_start = mrgn; y_start <= mrgn + wh; y_start += pt / 2) { n = noise(nst * (x_start / w), nst * (y_start / h)); angle = n * Math.PI; if (cfg.round != -1) angle = int(angle / (1/cfg.round * PI)) * 1/cfg.round * PI; dx = step * Math.cos(angle); x_start += dx; if (rnd.random_dec() < 0.35) { ellipse(x_start, y_start, pt * (1 + 0.5 * rnd.random_dec())); } } } for (let i = mrgn; i <= mrgn + wh; i += cfg.gap) { y_start = i; nst = 1; for (let x_start = mrgn; x_start < mrgn + ww; x_start += pt / 2) { n = noise(nst * (x_start / w), nst * (y_start / h)); angle = n * 2 * Math.PI; if (cfg.round != -1) angle = int(angle / (1/cfg.round * PI)) * 1/cfg.round * PI; dy = step * Math.sin(angle); y_start += dy; if (rnd.random_dec() < 0.35) { ellipse(x_start, y_start, pt * (1 + 0.5 * rnd.random_dec())); } } } } return cfg; } // from https://stackoverflow.com/questions/8022885/rgb-to-hsv-color-in-javascript // input: r,g,b in [0,1], out: h in [0,360) and s,v in [0,1] function rgb2hsv(r, g, b) { // r = r/255; g = g/255; b = b/255; let v = Math.max(r, g, b), c = v - Math.min(r, g, b); let h = c && ((v == r) ? (g - b) / c : ((v == g) ? 2 + (b - r) / c : 4 + (r - g) / c)); return [60 * (h < 0 ? h + 6 : h), v && c / v, v]; } // from https://stackoverflow.com/questions/17242144/javascript-convert-hsb-hsv-color-to-rgb-accurately/54024653#54024653 // input: h in [0,360] and s,v in [0,1] - output: r,g,b in [0,1] function hsv2rgb(h, s, v) { let f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0); // return [f(5)*255,f(3)*255,f(1)*255]; return [f(5), f(3), f(1)]; } // from https://stackoverflow.com/questions/45309447/calculating-median-javascript // function median(values) { // if (values.length === 0) throw new Error("No inputs"); // values.sort(function(a, b) { // return a - b; // }); // var half = Math.floor(values.length / 2); // if (values.length % 2) // return values[half]; // return (values[half - 1] + values[half]) / 2.0; // } // From https://stackoverflow.com/questions/1669190/find-the-min-max-element-of-an-array-in-javascript Array.prototype.max = function() { return Math.max.apply(null, this); }; Array.prototype.min = function() { return Math.min.apply(null, this); }; // From https://stackoverflow.com/questions/2963281/javascript-algorithm-to-find-elements-in-array-that-are-not-in-another-array function setdiff(a1, a2) { // console.log(a1) // console.log(a2) // console.log(a2.filter(x => !a1.includes(x)) ) return a2.filter(x => !a1.includes(x)) } function generate_masks_colors_noise(color_style) { /************************************************************************* * Generate pattern of masks and colors *************************************************************************/ let pattern_so_far = new Array(), color_pattern_so_far = new Array(); // generate pattern of masks and colors for (var i = 0; i < mask_model.length; i++) { if (color_style == CLR_FROM_MODEL) { if (i == 0) { pattern[i] = rnd.random_choice(mask_model[i]); } else { pattern[i] = rnd.random_choice(setdiff(pattern_so_far, mask_model[i][pattern[i - 1]])); } if (i == 0) { color_pattern[i] = rnd.random_choice(color_model[pattern[i] - 1]); } else { color_pattern[i] = rnd.random_choice(setdiff(color_pattern_so_far, color_model[pattern[i] - 1])); } pattern[i] = pattern[i] - 1; color_pattern[i] = color_pattern[i] - 1; pattern_so_far.push(pattern[i] + 1); color_pattern_so_far.push(color_pattern[i] + 1); } else if (color_style == CLR_UNIFORM) { if (i == 0) { pattern[i] = round(rnd.random_dec() * (masks.length - 1)); } else { pattern[i] = rnd.random_choice(setdiff(pattern, [...Array(masks.length).keys()])); } if (i == 0) { color_pattern[i] = round(rnd.random_dec() * (num_colors_per_palette - 1)); } else { color_pattern[i] = rnd.random_choice(setdiff(color_pattern, [...Array(num_colors_per_palette).keys()])) } } // The shape prototypes are the prototypes themselves (25), and their flipped versions (25 more). So if the shape id is >25, need to subtract 25 and use its flipped version. if (pattern[i] > (num_prototypes - 1)) { mask_gen[i] = reshape(masks[pattern[i] - num_prototypes], Nx, Ny) mask_gen_use = new Array for (var cuse = 0; cuse < mask_gen[i].length; cuse++) { mask_gen_use[cuse] = mask_gen[i][mask_gen[i].length - cuse - 1]; } mask_gen[i] = mask_gen_use; } else { mask_gen[i] = reshape(masks[pattern[i]], Nx, Ny) } } // noise_vector = [-0.1476, 0.0409, -0.0298]; // test vector to match MATLAB implementation for (var k = 0; k < mask_model.length; k++) { noise_vector[k] = new Array(); for (var n = 0; n < min_noise.length; n++) { noise_vector[k][n] = rnd.random_num(min_noise[n] / precision, max_noise[n] / precision); } } /*************************************************************************/ } function infer_category() { // predict category using classifier saved in model.js: landscape, flower, urban, bird let pred_scene = new Array(); for (var i = 0; i < num_categories; i++) { pred_scene[i] = rnd.random_dec() * 0.00001; for (var k = 0; k < pattern.length; k++) { pred_scene[i] = pred_scene[i] + pfgc[pattern[k]][k][i]; } } return pred_scene.indexOf(max(pred_scene)); }