kaka.farm

Unnamed repository; edit this file 'description' to name the repository.
git clone https://kaka.farm/~git/kaka.farm
Log | Files | Refs | README

main.js (2705B)


      1 (function() {
      2 	let number_of_rectangles = 2;
      3 	let factor = 2;
      4 	const INTERVAL = 750;
      5 
      6 	function hsv_to_rgb(hue, saturation, value) {
      7 		// https://en.wikipedia.org/wiki/HSL_and_HSV#HSV_to_RGB
      8 		// H in [0, 1] (position on the color wheel)
      9 		// S in [0, 1]
     10 		// V in [0, 1]
     11 
     12 		let chroma = value * saturation;
     13 
     14 		let hue_tag = hue * 6;
     15 
     16 		let x = chroma * (1 - Math.abs((hue_tag % 2) - 1));
     17 
     18 		let [red_1, green_1, blue_1] = ((hue_tag, chroma, x)=>{
     19 			if (hue_tag >= 0 && hue_tag < 1) { return [chroma, x, 0];
     20 			} else if (hue_tag >= 1 && hue_tag < 2) { return [x, chroma, 0];
     21 			} else if (hue_tag >= 2 && hue_tag < 3) { return [0, chroma, x];
     22 			} else if (hue_tag >= 3 && hue_tag < 4) { return [0, x, chroma];
     23 			} else if (hue_tag >= 4 && hue_tag < 5) { return [x, 0, chroma];
     24 			} else if (hue_tag >= 5 && hue_tag < 6) { return [chroma, 0, x];
     25 			}
     26 		})(hue_tag, chroma, x);
     27 
     28 		let m = value - chroma;
     29 
     30 		return [red_1 + m, green_1 + m, blue_1 + m];
     31 	}
     32 
     33 	function draw() {
     34 		let canvas = document.getElementById('canvas');
     35 		let ctx = canvas.getContext('2d');
     36 
     37 		console.info(canvas.width, number_of_rectangles);
     38 
     39 		ctx.clearRect(0, 0, canvas.width, canvas.height);
     40 
     41 		let rectangle_width = canvas.width / number_of_rectangles;
     42 
     43 		for (
     44 			let rectangle_number = 0;
     45 			rectangle_number < number_of_rectangles;
     46 			rectangle_number++
     47 		) {
     48 			ctx.beginPath();
     49 
     50 			let rect_hsv_value = (number_of_rectangles - rectangle_number - 1) / (number_of_rectangles - 1);
     51 			let rgb = hsv_to_rgb(0, 0, rect_hsv_value).map(x=>255 * x);
     52 			ctx.fillStyle = `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`;
     53 
     54 			let rectangle_x = rectangle_number * rectangle_width;
     55 
     56 			ctx.fillRect(Math.floor(rectangle_x), 0, Math.ceil(rectangle_width), canvas.height);
     57 		}
     58 	}
     59 
     60 	function resize_window() {
     61 		// https://stackoverflow.com/a/32119392
     62 
     63 		let canvas = document.getElementById('canvas');
     64 
     65 		canvas.width = window.innerWidth;
     66 		canvas.style.width = window.innerWidth;
     67 		canvas.height = window.innerHeight;
     68 		canvas.style.height = window.innerHeight;
     69 	}
     70 
     71 	function main() {
     72 		let canvas = document.getElementById('canvas');
     73 		let ctx = canvas.getContext('2d');
     74 
     75 		resize_window();
     76 		//reset_world();
     77 
     78 		//canvas.addEventListener('click', reset_world);
     79 
     80 		window.addEventListener('resize', ()=>{resize_window(); draw();})
     81 
     82 		draw();
     83 
     84 		setInterval(
     85 			()=>{
     86 				if (number_of_rectangles > canvas.width) {
     87 					factor = 0.5;
     88 					number_of_rectangles = 2**Math.floor(Math.log2(canvas.width));
     89 				} else if (number_of_rectangles <= 2) {
     90 					factor = 2;
     91 					number_of_rectangles = 2;
     92 				}
     93 				number_of_rectangles = factor * number_of_rectangles;
     94 				draw();
     95 			},
     96 			INTERVAL,
     97 		);
     98 	}
     99 
    100 	window.addEventListener('load', main);
    101 })();