From 863f00b54ab6db35c791ee31143283b1155e1de3 Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Sat, 29 Apr 2017 21:49:35 -0400 Subject: sort by color and brightness --- client/index.js | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- index.html | 34 ++++++++++++++++++++++-- 2 files changed, 105 insertions(+), 9 deletions(-) diff --git a/client/index.js b/client/index.js index 6a32627..eef40db 100644 --- a/client/index.js +++ b/client/index.js @@ -8,6 +8,8 @@ import { Grid, Views, HexFactory } from 'honeycomb-grid' const gridSize = browser.isMobile ? 25 : 50 const hexagon = polygon(6, gridSize) +const hertz_el = document.querySelector('#hertz') + const grid = Grid({ size: gridSize, }) @@ -17,13 +19,13 @@ const Hex = HexFactory({ template: function(hex) { return ` - + ` } }) -const container = document.querySelector("#container") +const container = document.querySelector('#container') const origin = { x: container.offsetWidth / 2 - hexagon.width / 2, y: container.offsetHeight / 2 - hexagon.height / 2, @@ -34,7 +36,7 @@ const view = Views.DOM({ }) let last = null, dragging = false -let hexes +let hexes, els = [], order = [] requestAudioContext(init) @@ -49,6 +51,9 @@ function init () { document.addEventListener('mousemove', move) document.addEventListener('mouseup', up) } + document.querySelector('#frequency').addEventListener('click', sortByFrequency) + document.querySelector('#color').addEventListener('click', sortByColor) + document.querySelector('#brightness').addEventListener('click', sortByBrightness) build(colundi.list) keys.listen(function(index){ index += 20 @@ -56,8 +61,23 @@ function init () { kalimba.play(freq) }) } +function sortByBrightness () { + els.sort((a,b) => a.lum>b.lum?-1:a.lum==b.lum?0:1).map(resort) +} +function sortByColor () { + els.sort((a,b) => a.hue a.freq p.toFixed(3)).join(" "), + pointString: points.map(p => p.toFixed(3)).join(' '), width: max_x - min_x, height: max_y - min_y } } function hexToString(hex) { - return [hex.x, hex.y, hex.z].join("_") + return [hex.x, hex.y, hex.z].join('_') +} +function rgbStringToHSL(s) { + const RGB = s.replace('rgb(','').replace(')','').split(', ').map((a) => parseInt(a)) + var R = RGB[0] + var G = RGB[1] + var B = RGB[2] + var var_R = ( R / 255 ) //RGB from 0 to 255 + var var_G = ( G / 255 ) + var var_B = ( B / 255 ) + + var var_Min = Math.min( var_R, var_G, var_B ) //Min. value of RGB + var var_Max = Math.max( var_R, var_G, var_B ) //Max. value of RGB + var del_Max = var_Max - var_Min //Delta RGB value + + var H, S + var L = ( var_Max + var_Min ) / 2 + + if ( del_Max == 0 ) //This is a gray, no chroma... + { + H = 0 //HSL results from 0 to 1 + S = 0 + } + else //Chromatic data... + { + if ( L < 0.5 ) S = del_Max / ( var_Max + var_Min ) + else S = del_Max / ( 2 - var_Max - var_Min ) + + var del_R = ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max + var del_G = ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_Max + var del_B = ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max + + if ( var_R == var_Max ) H = del_B - del_G + else if ( var_G == var_Max ) H = ( 1 / 3 ) + del_R - del_B + else if ( var_B == var_Max ) H = ( 2 / 3 ) + del_G - del_R + + if ( H < 0 ) H += 1 + if ( H > 1 ) H -= 1 + } + return [H,S,L] } diff --git a/index.html b/index.html index 5288f88..eeaaa22 100644 --- a/index.html +++ b/index.html @@ -1,8 +1,7 @@ honeycomb - -