diff --git a/src/javascript/Heatmap-5.js b/src/javascript/Heatmap-5.js deleted file mode 100644 index 8f99ed3..0000000 --- a/src/javascript/Heatmap-5.js +++ /dev/null @@ -1,162 +0,0 @@ -/** - * - * EmojiHeatmap: A dynamic, interactive display of emojis that shift - * with mouse movement, creating a detailed color-coordinated heatmap. - * - * Based on original work by Jonas Kjeldmand Jensen, July 2024 - * - */ - -// Global variables -let xOffset = 0; -let yOffset = 0; -const FONT_SIZE = 16; -const NOISE_SCALE = 0.0008; -const EMOJI_CATEGORIES = { - blue: [], - cyan: [], - green: [], - yellow: [], - orange: [], - red: [], -}; - -/** - * Setup function to initialize the canvas and categorize emojis - */ -function setup() { - createCanvas(windowWidth, windowHeight); - textSize(FONT_SIZE); - textAlign(CENTER, CENTER); - categorizeEmojis(); -} - -/** - * Categorize emojis based on their prominent colors - */ -function categorizeEmojis() { - const emojiRanges = [ - [0x1F300, 0x1F5FF], - [0x1F600, 0x1F64F], - [0x1F680, 0x1F6FF], - [0x1F900, 0x1F9FF], - [0x2600, 0x26FF], - [0x2700, 0x27BF], - [0x1F400, 0x1F4FF] - ]; - - for (let range of emojiRanges) { - for (let code = range[0]; code <= range[1]; code++) { - const emoji = String.fromCodePoint(code); - const category = getEmojiCategory(emoji); - if (category) { - EMOJI_CATEGORIES[category].push(emoji); - } - } - } - - // Ensure each category has at least one emoji - for (let category in EMOJI_CATEGORIES) { - if (EMOJI_CATEGORIES[category].length === 0) { - EMOJI_CATEGORIES[category].push('โ“'); - } - } -} - -/** - * Determine the category of an emoji based on its prominent color - * This is a simplified version and may not be 100% accurate - * @param {string} emoji - The emoji character - * @returns {string|null} The category name or null if not categorized - */ -function getEmojiCategory(emoji) { - const blueEmojis = '๐ŸŒŠ๐ŸŒŽ๐Ÿณ๐Ÿฌ๐Ÿฆ‹๐ŸŸ๐Ÿ’™๐Ÿ”ต๐Ÿงข๐Ÿ‘–๐Ÿš™๐ŸŠโ€โ™‚๏ธ๐Ÿ‹๐Ÿฆ•๐Ÿงฟ๐Ÿฅถโ„๏ธ๐ŸŒ€๐ŸงŠ๐ŸŽ๐Ÿฆ๐Ÿฆ€๐Ÿ’ง๐ŸŒŒ๐ŸŒ ๐ŸŒƒ๐Ÿ›ฐ๏ธ๐Ÿ›ธ๐Ÿš€๐Ÿ”น๐Ÿ”ท๐Ÿ›ก๏ธ๐ŸŒ€๐Ÿ“˜โœณ๏ธ๐ŸŸฆ๐ŸŒŒ๐ŸŒ‰'; - const cyanEmojis = '๐Ÿ‹๐Ÿณ๐ŸŸ๐Ÿฌ๐Ÿ’Ž๐Ÿ”ท๐Ÿ’ ๐ŸŒŠ๐Ÿ”น๐ŸŒ€๐ŸŽ'; - const greenEmojis = '๐ŸŒฟ๐Ÿ€๐ŸŒฑ๐ŸŒฒ๐Ÿฅฌ๐Ÿฅฆ๐Ÿธ๐Ÿ’š๐ŸŸข๐Ÿงช๐Ÿฅ๐Ÿ๐ŸฆŽ๐ŸŠ๐Ÿข๐Ÿƒ๐Ÿฅ—๐Ÿง‘โ€๐ŸŒพ๐Ÿ‰๐Ÿˆ๐Ÿฅ’๐Ÿฅ‘๐ŸŒณ๐ŸŒต๐Ÿ๐Ÿฒ๐Ÿชด๐ŸฆŽ๐Ÿฆ–'; - const yellowEmojis = '๐ŸŒป๐ŸŒŸ๐Ÿ‹๐ŸŒ๐Ÿฅ๐Ÿ’›๐ŸŸจ๐Ÿ†๐ŸŒ•๐Ÿ”ถโ˜€๏ธ๐ŸŒž๐Ÿฏ๐Ÿค๐Ÿš•๐Ÿโญ๐ŸŒผ๐Ÿง€๐Ÿ๐Ÿค๐Ÿฆ‹๐Ÿ’›๐ŸŸก๐ŸŒ๐ŸŒŸ'; - const orangeEmojis = '๐ŸŠ๐ŸŽƒ๐Ÿฆ๐Ÿ”ถ๐ŸŸง๐ŸŸ ๐Ÿ‘๐Ÿฅ•๐ŸฆŠ๐Ÿงก๐Ÿ๐Ÿฆ’๐Ÿ…๐Ÿฅญ๐Ÿงณ๐Ÿ”ธ๐Ÿฆบ๐Ÿ€๐Ÿšผ๐Ÿฆง๐ŸฆŠ'; - const redEmojis = '๐ŸŽ๐Ÿ“๐ŸŒนโค๏ธ๐Ÿ”ด๐ŸŸฅ๐Ÿฎ๐Ÿšจ๐Ÿ‘น๐Ÿž๐Ÿ…๐ŸŒถ๏ธ๐Ÿ’๐Ÿฆž๐Ÿฆ€๐Ÿ†˜๐Ÿงจ๐Ÿฅ๐Ÿš—๐Ÿ™๐Ÿฆ‘๐Ÿง›โ€โ™‚๏ธ๐ŸงŸโ€โ™€๏ธ๐ŸฆŒ๐Ÿฆง'; - - if (blueEmojis.includes(emoji)) return 'blue'; - if (cyanEmojis.includes(emoji)) return 'cyan'; - if (greenEmojis.includes(emoji)) return 'green'; - if (yellowEmojis.includes(emoji)) return 'yellow'; - if (orangeEmojis.includes(emoji)) return 'orange'; - if (redEmojis.includes(emoji)) return 'red'; - return null; -} - -/** - * Draw function to render emojis on the canvas - */ -function draw() { - background(220); - - const time = frameCount * 0.0009; - - for (let x = 0; x < width; x += FONT_SIZE) { - for (let y = 0; y < height; y += FONT_SIZE) { - const noiseValue = calculateNoiseValue(x, y, time); - const emoji = getEmojiFromNoiseValue(noiseValue); - text(emoji, x, y); - } - } -} - -/** - * Calculate Perlin noise value for given coordinates and time - * @param {number} x - X coordinate - * @param {number} y - Y coordinate - * @param {number} time - Time factor for animation - * @returns {number} Noise value between 0 and 1 - */ -function calculateNoiseValue(x, y, time) { - return noise((x + xOffset) * NOISE_SCALE, (y + yOffset) * NOISE_SCALE, time); -} - -/** - * Get emoji character based on noise value - * @param {number} noiseValue - Perlin noise value between 0 and 1 - * @returns {string} Emoji character - */ -function getEmojiFromNoiseValue(noiseValue) { - let category, adjustedNoiseValue; - if (noiseValue < 0.25) { - category = 'blue'; - adjustedNoiseValue = map(noiseValue, 0, 0.25, 0, 1); - } else if (noiseValue < 0.4) { - category = 'cyan'; - adjustedNoiseValue = map(noiseValue, 0.25, 0.4, 0, 1); - } else if (noiseValue < 0.55) { - category = 'green'; - adjustedNoiseValue = map(noiseValue, 0.4, 0.55, 0, 1); - } else if (noiseValue < 0.725) { - category = 'yellow'; - adjustedNoiseValue = map(noiseValue, 0.55, 0.725, 0, 1); - } else if (noiseValue < 0.85) { - category = 'orange'; - adjustedNoiseValue = map(noiseValue, 0.725, 0.85, 0, 1); - } else { - category = 'red'; - adjustedNoiseValue = map(noiseValue, 0.85, 1, 0, 1); - } - - const categoryEmojis = EMOJI_CATEGORIES[category]; - const index = floor(adjustedNoiseValue * categoryEmojis.length); - return categoryEmojis[index]; -} - -/** - * Handle mouse dragging to update offsets - */ -function mouseDragged() { - xOffset += (pmouseX - mouseX) * 0.4; - yOffset += (pmouseY - mouseY) * 0.4; -} - -/** - * Handle window resizing - */ -function windowResized() { - resizeCanvas(windowWidth, windowHeight); -} diff --git a/src/javascript/Heatmap-v1.js b/src/javascript/Heatmap-v1.js deleted file mode 100644 index 19f0b3d..0000000 --- a/src/javascript/Heatmap-v1.js +++ /dev/null @@ -1,166 +0,0 @@ -/** - * - * EmojiHeatmap: A dynamic, interactive display of emojis that shift - * with mouse movement, creating a detailed color-coordinated heatmap. - * - * Based on original work by Jonas Kjeldmand Jensen, July 2024 - * - */ - -// Global variables -let xOffset = 0; -let yOffset = 0; -const FONT_SIZE = 16; -const NOISE_SCALE = 0.00125; -const EMOJI_CATEGORIES = { - blue: [], - cyan: [], - green: [], - yellow: [], - orange: [], - red: [], - purple: [], - magenta: [], - }; - -/** - * Setup function to initialize the canvas and categorize emojis - */ -function setup() { - createCanvas(windowWidth, windowHeight); - textSize(FONT_SIZE); - textAlign(CENTER, CENTER); - categorizeEmojis(); -} - -/** - * Categorize emojis based on their prominent colors - */ -function categorizeEmojis() { - const emojiRanges = [ - [0x1F300, 0x1F5FF], - [0x1F600, 0x1F64F], - [0x1F680, 0x1F6FF], - [0x1F900, 0x1F9FF], - [0x2600, 0x26FF], - [0x2700, 0x27BF], - [0x1F400, 0x1F4FF] - ]; - - for (let range of emojiRanges) { - for (let code = range[0]; code <= range[1]; code++) { - const emoji = String.fromCodePoint(code); - const category = getEmojiCategory(emoji); - if (category) { - EMOJI_CATEGORIES[category].push(emoji); - } - } - } - - // Ensure each category has at least one emoji - for (let category in EMOJI_CATEGORIES) { - if (EMOJI_CATEGORIES[category].length === 0) { - EMOJI_CATEGORIES[category].push('โ“'); - } - } -} - -/** - * Determine the category of an emoji based on its prominent color - * This is a simplified version and may not be 100% accurate - * @param {string} emoji - The emoji character - * @returns {string|null} The category name or null if not categorized - */ -function getEmojiCategory(emoji) { - const purple ='๐Ÿ˜ˆ๐Ÿ‘ฟ๐Ÿ’Ÿ๐Ÿ’œ๐Ÿ‘พ๐Ÿ™†โ€โ™€๏ธ๐Ÿคทโ€โ™€๏ธ๐Ÿคฐ๐Ÿ‡๐Ÿ†๐ŸŒ‚๐ŸŽ†๐Ÿช๐Ÿ”ฎ๐Ÿงฟ๐Ÿšบ๐Ÿ›๐Ÿ•‰๏ธ๐Ÿ•Ž๐Ÿ”ฏโ›Ž๐ŸŸช๐ŸŸฃ' ; - const magenta = '๐Ÿ’˜๐Ÿ’๐Ÿ’–๐Ÿ’—๐Ÿ’“๐Ÿ’ž๐Ÿ’•๐Ÿง ๐Ÿซ€๐Ÿซ๐Ÿ‘…๐Ÿ‘„๐Ÿซฆ๐Ÿ’…๐Ÿ‘ฉโ€๐ŸŽค๐Ÿงžโ€โ™€๏ธ๐Ÿ„โ€โ™€๏ธ๐Ÿฆ„๐Ÿท๐Ÿ–๐Ÿฝ๐Ÿฆฉ๐Ÿ™๐Ÿชฑ๐ŸŒธ๐Ÿ’ฎ๐Ÿชท๐ŸŒท๐Ÿ ๐Ÿฃ๐Ÿค๐Ÿญ๐Ÿฌ๐Ÿ’’๐Ÿฉ๐Ÿ’ˆ๐ŸŽ€๐ŸŽŸ๏ธ๐Ÿ‘™๐Ÿ‘š๐Ÿ‘›๐Ÿ›๏ธ๐Ÿงฌ๐Ÿงซ๐Ÿณ๏ธโ€โšง๏ธ๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽค๐Ÿ„๐Ÿปโ€โ™€๏ธ' ; - const blueEmojis = '๐Ÿ’™๐Ÿ’ฆ๐Ÿ’ค๐Ÿงžโ€โ™‚๏ธ๐Ÿฆ•๐Ÿณ๐Ÿ‹๐Ÿฌ๐ŸŸ๐Ÿฆˆ๐Ÿฆ‹๐Ÿชบ๐Ÿซ๐ŸงŠ๐Ÿฅฃ๐ŸŒ๐ŸŒŽ๐ŸŒ๐ŸŒ๐Ÿ—บ๏ธ๐Ÿ—พ๐Ÿž๏ธ๐ŸŒƒ๐Ÿ™๏ธ๐Ÿš†๐Ÿ›๐ŸšŽ๐ŸŽ‘๐Ÿš™๐Ÿ›ปโ›ด๏ธ๐Ÿ’บ๐Ÿ›ฌ๐Ÿ’ง๐ŸŒŠ๐ŸŒ€๐Ÿฅ๐Ÿงฟ๐Ÿชฌ๐Ÿงต๐Ÿ‘”๐Ÿ‘•๐Ÿ‘–๐Ÿงข๐Ÿ’Ž๐Ÿ“ช๐Ÿ—ณ๏ธ๐Ÿ›—๐Ÿ›‹๏ธ๐Ÿ–Œ๏ธ๐Ÿ“˜๐Ÿชฃ๐Ÿฉป๐ŸŸฆ๐Ÿ”ต๐Ÿ”ท๐Ÿ”น'; - const cyanEmojis = '๐Ÿฆœ๐Ÿ ๐Ÿฌ๐ŸŒŠ๐Ÿฆˆ๐Ÿฅถ๐Ÿ‹๐Ÿณ๐ŸŸ๐Ÿฌ๐Ÿ’Ž๐Ÿ”ท๐Ÿ’ ๐ŸŽฝ'; - const greenEmojis = '๐ŸŒฟ๐Ÿ€๐ŸŒฑ๐ŸŒฒ๐Ÿฅฌ๐Ÿฅฆ๐Ÿธ๐Ÿ’š๐ŸŸข๐Ÿงช๐Ÿฅ๐Ÿ๐ŸฆŽ๐ŸŠ๐Ÿข๐Ÿฆœ๐Ÿƒ๐Ÿฅ—๐Ÿง‘โ€๐ŸŒพ'; - const yellowEmojis = '๐ŸŒป๐ŸŒŸ๐Ÿ‹๐ŸŒ๐Ÿฅ๐Ÿ’›๐ŸŸจ๐Ÿ†๐ŸŒ•๐Ÿ”ถโ˜€๏ธ๐ŸŒž๐Ÿฏ๐Ÿค๐Ÿš•๐Ÿโญ๐ŸŒผ๐Ÿง€'; - const orangeEmojis = '๐ŸŠ๐ŸŽƒ๐Ÿฆ๐Ÿ”ถ๐ŸŸง๐ŸŸ ๐Ÿ‘๐Ÿฅ•๐ŸฆŠ๐Ÿงก๐Ÿ๐Ÿฆ’๐Ÿ…๐Ÿฅญ๐Ÿงณ๐Ÿ”ธ๐Ÿฆบ๐Ÿ€๐Ÿšผ'; - const redEmojis = '๐ŸŽ๐Ÿ“๐ŸŒนโค๏ธ๐Ÿ”ด๐ŸŸฅ๐Ÿฎ๐Ÿšจ๐Ÿ‘น๐Ÿž๐Ÿ…๐ŸŒถ๏ธ๐Ÿ’๐Ÿฆž๐Ÿฆ€๐Ÿ†˜๐Ÿงจ๐Ÿš—'; - - if (purple.includes(emoji)) return 'purple'; - if (magenta.includes(emoji)) return 'magenta'; - if (blueEmojis.includes(emoji)) return 'blue'; - if (cyanEmojis.includes(emoji)) return 'cyan'; - if (greenEmojis.includes(emoji)) return 'green'; - if (yellowEmojis.includes(emoji)) return 'yellow'; - if (orangeEmojis.includes(emoji)) return 'orange'; - if (redEmojis.includes(emoji)) return 'red'; - return null; -} - -/** - * Draw function to render emojis on the canvas - */ -function draw() { - background(220); - - const time = frameCount * 0.01; - - for (let x = 0; x < width; x += FONT_SIZE) { - for (let y = 0; y < height; y += FONT_SIZE) { - const noiseValue = calculateNoiseValue(x, y, time); - const emoji = getEmojiFromNoiseValue(noiseValue); - text(emoji, x, y); - } - } -} - -/** - * Calculate Perlin noise value for given coordinates and time - * @param {number} x - X coordinate - * @param {number} y - Y coordinate - * @param {number} time - Time factor for animation - * @returns {number} Noise value between 0 and 1 - */ -function calculateNoiseValue(x, y, time) { - return noise((x + xOffset) * NOISE_SCALE, (y + yOffset) * NOISE_SCALE, time); -} - -/** - * Get emoji character based on noise value - * @param {number} noiseValue - Perlin noise value between 0 and 1 - * @returns {string} Emoji character - */ -function getEmojiFromNoiseValue(noiseValue) { - let category; - if (noiseValue < 0.25) { - category = 'blue'; - } else if (noiseValue < 0.3) { - category = 'cyan'; - } else if (noiseValue < 0.4) { - category = 'green'; - } else if (noiseValue < 0.5) { - category = 'yellow'; - } else if (noiseValue < 0.6) { - category = 'orange'; - } else if (noiseValue < 0.7) { - category = 'red'; - } else if (noiseValue < 0.8) { - category = 'purple'; - } else { - category = 'magenta'; - } - - const categoryEmojis = EMOJI_CATEGORIES[category]; - const index = floor(map(noiseValue, 0, 1, 0, categoryEmojis.length)); - return categoryEmojis[index]; -} - -/** - * Handle mouse dragging to update offsets - */ -function mouseDragged() { - xOffset += (pmouseX - mouseX) * 0.4; - yOffset += (pmouseY - mouseY) * 0.1; -} - -/** - * Handle window resizing - */ -function windowResized() { - resizeCanvas(windowWidth, windowHeight); -} \ No newline at end of file diff --git a/src/javascript/Heatmap-v2.js b/src/javascript/Heatmap-v2.js deleted file mode 100644 index 8cc02a9..0000000 --- a/src/javascript/Heatmap-v2.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * - * EmojiHeatmap: A dynamic, interactive display of emojis that shift - * with mouse movement, creating a detailed color-coordinated heatmap. - * - * Based on original work by Jonas Kjeldmand Jensen, July 2024 - * - */ - -// Global variables -let xOffset = 0; -let yOffset = 0; -let mouseSensitivity = 0.6; -const FONT_SIZE = 16; -const NOISE_SCALE = 0.0006; -const EMOJI_CATEGORIES = { - purple: ['๐Ÿ˜ˆ', '๐Ÿ”ฎ', '๐Ÿ‘ฟ', '๐Ÿง•', '๐Ÿคทโ€โ™€๏ธ', '๐Ÿคฐ', '๐ŸŒธ', '๐ŸŒท', '๐ŸŒบ','๐ŸŽ†'], - blue: ['๐ŸŒŠ', '๐ŸŒŽ', '๐ŸŸ', '๐Ÿ’™', '๐Ÿ”ต', '๐Ÿงข', '๐Ÿ‘–', '๐Ÿงต', '๐Ÿ‘”', '๐Ÿฅ', '๐ŸŸฆ', '๐Ÿ”น', '๐Ÿงฟ', '๐Ÿ”ท', '๐Ÿš™', '๐Ÿฅถ', '๐ŸŒ€', '๐Ÿฉป', '๐Ÿ“˜', '๐Ÿ’Ž', '๐Ÿ›‹๏ธ', '๐Ÿ’ ', '๐ŸงŠ', '๐Ÿ›—'], - cyan: ['๐Ÿฌ', '๐Ÿ‹', '๐Ÿณ', '๐ŸŸ', '๐Ÿฌ', '๐Ÿชฃ', '๐Ÿ‘—', '๐Ÿฉด'], - green: ['๐ŸŒฟ', '๐Ÿ€', '๐ŸŒฑ', '๐Ÿฒ', '๐ŸŒฒ', '๐Ÿฅฌ', '๐Ÿคข', '๐Ÿฅฆ', '๐Ÿงฉ', '๐Ÿ', '๐Ÿ‰', '๐Ÿธ', '๐Ÿ’š', '๐Ÿ”‹', '๐Ÿคฎ', '๐Ÿงƒ', '๐Ÿ“—', '๐ŸŸข', '๐Ÿ”ซ', '๐Ÿงช', '๐Ÿฆš', '๐Ÿฆ–', '๐Ÿฅ', '๐Ÿ', '๐ŸฆŽ', '๐ŸŠ', '๐Ÿข', '๐Ÿƒ', '๐Ÿง‘โ€๐ŸŒพ'], - yellow: ['๐ŸŒป', '๐ŸŒŸ', '๐Ÿ‹', '๐ŸŒ', '๐Ÿฅ', '๐Ÿฆ', '๐Ÿ’›', '๐ŸŽ—๏ธ', '๐Ÿšก', '๐ŸŸจ', '๐Ÿ†', '๐ŸŽซ', '๐ŸŒ•', '๐ŸŒž', '๐Ÿ›Ž๏ธ', '๐Ÿ“’', '๐Ÿค', '๐Ÿš•', '๐Ÿ', '๐Ÿบ', 'โญ', '๐Ÿง€'], - orange: ['๐ŸŠ', '๐ŸŽƒ', '๐Ÿฆ', '๐Ÿ”ถ', '๐ŸŸง', '๐ŸŸ ', '๐ŸฆŠ', '๐Ÿ‘', '๐Ÿฅ•', '๐Ÿฆ', '๐Ÿบ', '๐ŸฆŠ', '๐Ÿ', '๐Ÿฏ', '๐Ÿ“™', '๐Ÿงก', '๐Ÿ’ฅ', '๐Ÿ”ฅ', '๐ŸŽ', '๐Ÿšš', '๐Ÿฆง', '๐Ÿ…', '๐Ÿ‚', '๐Ÿฆบ', '๐Ÿ€'], - red: ['๐ŸŽ', '๐Ÿ“', '๐ŸŒน', '๐Ÿ”ด', '๐ŸŸฅ', '๐Ÿฎ', '๐Ÿ’ข', '๐Ÿš—', '๐Ÿšจ', '๐Ÿฆ€', '๐Ÿฆž', '๐Ÿคฌ', 'โ›ฝ', '๐Ÿ‰', '๐Ÿ›‘', '๐ŸฅŠ', '๐Ÿ“', '๐Ÿšฉ', '๐Ÿš’', '๐Ÿฉธ', '๐Ÿงฐ', '๐Ÿฅฉ', '๐Ÿ’ƒ', '๐Ÿ‘น', '๐ŸŒน', '๐Ÿž', '๐Ÿฅต', '๐Ÿ‘บ', '๐Ÿฅซ', '๐Ÿ’‹', '๐Ÿ˜ก', '๐Ÿ’ฏ', '๐Ÿ’”', '๐Ÿ…', 'โค๏ธโ€๐Ÿ”ฅ', '๐ŸŒถ๏ธ', '๐Ÿ’', '๐Ÿ†˜', '๐Ÿงจ', '๐Ÿš—'], -}; - -/** - * Setup function to initialize the canvas - */ -function setup() { - createCanvas(windowWidth, windowHeight); - textSize(FONT_SIZE); - textAlign(CENTER, CENTER); -} - -/** - * Draw function to render emojis on the canvas - */ -function draw() { - background(220); - - const time = frameCount * 0.00075; - - for (let x = 0; x < width; x += FONT_SIZE) { - for (let y = 0; y < height; y += FONT_SIZE) { - const noiseValue = calculateNoiseValue(x, y, time); - const emoji = getEmojiFromNoiseValue(noiseValue); - text(emoji, x, y); - } - } -} - -/** - * Calculate Perlin noise value for given coordinates and time - * @param {number} x - X coordinate - * @param {number} y - Y coordinate - * @param {number} time - Time factor for animation - * @returns {number} Noise value between 0 and 1 - */ -function calculateNoiseValue(x, y, time) { - return noise((x + xOffset) * NOISE_SCALE, (y + yOffset) * NOISE_SCALE, time); -} - -/** - * Get emoji character based on noise value - * @param {number} noiseValue - Perlin noise value between 0 and 1 - * @returns {string} Emoji character - */ -function getEmojiFromNoiseValue(noiseValue) { - let category, adjustedNoiseValue; - if (noiseValue < 0.3) { - category = 'purple'; - adjustedNoiseValue = map(noiseValue, 0, 0.30, 0, 1); - } else if (noiseValue < 0.3) { - category = 'blue'; - adjustedNoiseValue = map(noiseValue, 0.27, 0.3, 0, 1); - } else if (noiseValue < 0.4) { - category = 'cyan'; - adjustedNoiseValue = map(noiseValue, 0.3, 0.4, 0, 1); - } else if (noiseValue < 0.5) { - category = 'green'; - adjustedNoiseValue = map(noiseValue, 0.4, 0.5, 0, 1); - } else if (noiseValue < 0.6) { - category = 'yellow'; - adjustedNoiseValue = map(noiseValue, 0.5, 0.6, 0, 1); - } else if (noiseValue < 0.7) { - category = 'orange'; - adjustedNoiseValue = map(noiseValue, 0.6, 0.7, 0, 1); - } else { - category = 'red'; - adjustedNoiseValue = map(noiseValue, 0.7, 1, 0, 1); - } - - const categoryEmojis = EMOJI_CATEGORIES[category]; - const index = floor(adjustedNoiseValue * (categoryEmojis.length - 1)); - return categoryEmojis[index]; -} - - -/** - * Handle mouse dragging to update offsets - */ -function mouseDragged() { - xOffset += (pmouseX - mouseX) * mouseSensitivity; - yOffset += (pmouseY - mouseY) * mouseSensitivity; -} - -/** - * Handle window resizing - */ -function windowResized() { - resizeCanvas(windowWidth, windowHeight); -} \ No newline at end of file diff --git a/src/javascript/Heatmap-v3(islands).js b/src/javascript/Heatmap-v3(islands).js deleted file mode 100644 index 273d263..0000000 --- a/src/javascript/Heatmap-v3(islands).js +++ /dev/null @@ -1,220 +0,0 @@ -/** - * - * EmojiHeatmap: A dynamic, interactive display of emojis that shift - * with mouse movement, creating a detailed color-coordinated heatmap. - * - * Based on original work by Jonas Kjeldmand Jensen, July 2024 - * Modified to include more color ranges and balance color distribution - * - */ - -// Global variables -let xOffset = 0; -let yOffset = 0; -const FONT_SIZE = 16; -let NOISE_SCALE = 0.0001; -const EMOJI_CATEGORIES = { - purple: [], - magenta: [], - blue: [], - cyan: [], - green: [], - yellow: [], - orange: [], - red: [], -}; - -let colorCounts = { - purple: 0, magenta: 0, blue: 0, cyan: 0, - green: 0, yellow: 0, orange: 0, red: 0 -}; -let totalEmojis = 0; - -/** - * Setup function to initialize the canvas and categorize emojis - */ -function setup() { - createCanvas(windowWidth, windowHeight); - textSize(FONT_SIZE); - textAlign(CENTER, CENTER); - categorizeEmojis(); -} - -/** - * Categorize emojis based on their prominent colors - */ -function categorizeEmojis() { - const emojiRanges = [ - [0x1F300, 0x1F5FF], - [0x1F600, 0x1F64F], - [0x1F680, 0x1F6FF], - [0x1F900, 0x1F9FF], - [0x2600, 0x26FF], - [0x2700, 0x27BF], - [0x1F400, 0x1F4FF] - ]; - - for (let range of emojiRanges) { - for (let code = range[0]; code <= range[1]; code++) { - const emoji = String.fromCodePoint(code); - const category = getEmojiCategory(emoji); - if (category) { - EMOJI_CATEGORIES[category].push(emoji); - } - } - } - - // Ensure each category has at least one emoji - for (let category in EMOJI_CATEGORIES) { - if (EMOJI_CATEGORIES[category].length === 0) { - EMOJI_CATEGORIES[category].push('โ“'); - } - } -} - -/** - * Determine the category of an emoji based on its prominent color - * This is a simplified version and may not be 100% accurate - * @param {string} emoji - The emoji character - * @returns {string|null} The category name or null if not categorized - */ -function getEmojiCategory(emoji) { - const purple ='๐Ÿ˜ˆ๐Ÿ‘ฟ๐Ÿ’œ๐Ÿ‘พ๐Ÿ‡๐Ÿ†๐ŸŒ‚๐ŸŸช๐ŸŸฃ'; - const magenta = '๐Ÿ’˜๐Ÿ’๐Ÿ’–๐Ÿ’—๐Ÿ’“๐Ÿ’ž๐Ÿ’•๐Ÿง ๐Ÿซ€๐Ÿซ๐Ÿ’…๐Ÿ‘ฉโ€๐ŸŽค๐Ÿฆ„๐Ÿฆฉ๐Ÿ™๐Ÿชฑ๐ŸŒธ๐Ÿ’ฎ๐Ÿชท๐ŸŒท๐Ÿ ๐Ÿฃ๐Ÿค๐Ÿ’’๐Ÿฉ๐ŸŽ€๐ŸŽŸ๏ธ๐Ÿ‘™๐Ÿ‘š๐Ÿ‘›๐Ÿ›๏ธ๐Ÿงฌ๐Ÿงซ๐Ÿณ๏ธโ€โšง๏ธ๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽค๐Ÿ„๐Ÿปโ€โ™€๏ธ'; - const blueEmojis = '๐Ÿ’™๐Ÿ’ฆ๐Ÿ’ค๐Ÿงžโ€โ™‚๏ธ๐Ÿฆ•๐Ÿณ๐Ÿ‹๐Ÿฌ๐ŸŸ๐Ÿฆ‹๐Ÿชบ๐Ÿซ๐ŸงŠ๐Ÿฅฃ๐ŸŒ๐ŸŒŽ๐ŸŒ๐Ÿ—บ๏ธ๐Ÿž๏ธ๐Ÿ™๏ธ๐Ÿ’ง๐ŸŒŠ๐ŸŒ€๐Ÿฅ๐Ÿงฟ๐Ÿชฌ๐Ÿงต๐Ÿ‘”๐Ÿ‘–๐Ÿงข๐Ÿ’Ž๐Ÿ“ช๐Ÿ—ณ๏ธ๐Ÿ›—๐Ÿ›‹๏ธ๐Ÿ“˜๐Ÿชฃ๐Ÿฉป๐ŸŸฆ๐Ÿ”ต๐Ÿ”ท๐Ÿ”น'; - const cyanEmojis = '๐Ÿ ๐Ÿฌ๐ŸŒŠ๐Ÿฅถ๐Ÿ‹๐Ÿณ๐ŸŸ๐Ÿฌ๐Ÿ’Ž๐Ÿ”ท๐Ÿ’ '; - const greenEmojis = '๐ŸŒฟ๐Ÿ€๐ŸŒฑ๐ŸŒฒ๐Ÿฅฌ๐Ÿฅฆ๐Ÿธ๐Ÿ’š๐ŸŸข๐Ÿงช๐Ÿฅ๐Ÿ๐ŸŽฝ๐ŸฆŽ๐ŸŠ๐Ÿข๐Ÿƒ๐Ÿง‘โ€๐ŸŒพ'; - const yellowEmojis = '๐ŸŒป๐ŸŒŸ๐Ÿ‹๐ŸŒ๐ŸŸจ๐ŸŒ•๐Ÿ”ถโ˜€๏ธ๐ŸŒž๐Ÿฅ๐Ÿโญ๐Ÿง€'; - const orangeEmojis = '๐ŸŠ๐ŸŽƒ๐Ÿฆ๐Ÿ”ถ๐ŸŸง๐ŸŸ ๐Ÿ‘๐Ÿฅ•๐Ÿงก๐Ÿ…๐Ÿ”ธ๐Ÿ€๐ŸฆŠ'; - const redEmojis = '๐ŸŽ๐Ÿ“๐ŸŒน๐ŸŸฅ๐Ÿ‘น๐Ÿ…๐ŸŒถ๏ธ๐Ÿ’'; - - if (purple.includes(emoji)) return 'purple'; - if (magenta.includes(emoji)) return 'magenta'; - if (blueEmojis.includes(emoji)) return 'blue'; - if (cyanEmojis.includes(emoji)) return 'cyan'; - if (greenEmojis.includes(emoji)) return 'green'; - if (yellowEmojis.includes(emoji)) return 'yellow'; - if (orangeEmojis.includes(emoji)) return 'orange'; - if (redEmojis.includes(emoji)) return 'red'; - return null; -} - -/** - * Draw function to render emojis on the canvas - */ -function draw() { - background(220); - - const time = frameCount * 0.001; - colorCounts = {purple: 0, magenta: 0, blue: 0, cyan: 0, green: 0, yellow: 0, orange: 0, red: 0}; - totalEmojis = 0; - - for (let x = 0; x < width; x += FONT_SIZE) { - for (let y = 0; y < height; y += FONT_SIZE) { - const noiseValue = calculateNoiseValue(x, y, time); - const emoji = getEmojiFromNoiseValue(noiseValue); - text(emoji, x, y); - - // Count the emojis - const category = getEmojiCategory(emoji); - if (category) { - colorCounts[category]++; - totalEmojis++; - } - } - } - - // Adjust NOISE_SCALE based on color distribution - adjustNoiseScale(); -} - -/** - * Calculate Perlin noise value for given coordinates and time - * @param {number} x - X coordinate - * @param {number} y - Y coordinate - * @param {number} time - Time factor for animation - * @returns {number} Noise value between 0 and 1 - */ -function calculateNoiseValue(x, y, time) { - const baseNoise = noise((x + xOffset) * NOISE_SCALE, (y + yOffset) * NOISE_SCALE, time); - const detailNoise = noise((x + xOffset) * NOISE_SCALE * 8, (y + yOffset) * NOISE_SCALE * 8, time * 3) * 0.3; - return constrain(baseNoise * 0.8 + detailNoise, 0, 1); - } -/** - * Get emoji character based on noise value - * @param {number} noiseValue - Perlin noise value between 0 and 1 - * @returns {string} Emoji character - */ -function getEmojiFromNoiseValue(noiseValue) { - // Use a custom mapping to spread out the colors more evenly - let mappedValue; - if (noiseValue < 0.1) { - mappedValue = map(noiseValue, 0, 0.1, 0, 0.125); // Purple - } else if (noiseValue < 0.3) { - mappedValue = map(noiseValue, 0.1, 0.3, 0.125, 0.25); // Magenta - } else if (noiseValue < 0.5) { - mappedValue = map(noiseValue, 0.3, 0.5, 0.25, 0.5); // Blue and Cyan - } else if (noiseValue < 0.7) { - mappedValue = map(noiseValue, 0.5, 0.7, 0.5, 0.75); // Green and Yellow - } else if (noiseValue < 0.9) { - mappedValue = map(noiseValue, 0.7, 0.9, 0.75, 0.875); // Orange - } else { - mappedValue = map(noiseValue, 0.9, 1, 0.875, 1); // Red - } - - let category; - if (mappedValue < 0.25) { - category = 'purple'; - } else if (mappedValue < 0.3) { - category = 'magenta'; - } else if (mappedValue < 0.4) { - category = 'blue'; - } else if (mappedValue < 0.5) { - category = 'cyan'; - } else if (mappedValue < 0.6) { - category = 'green'; - } else if (mappedValue < 0.7) { - category = 'yellow'; - } else if (mappedValue < 0.8) { - category = 'orange'; - } else { - category = 'red'; - } - - const categoryEmojis = EMOJI_CATEGORIES[category]; - const index = floor(map(mappedValue, 0, 1, 0, categoryEmojis.length)); - return categoryEmojis[index]; - } - -/** - * Adjust NOISE_SCALE to balance color distribution - */ -function adjustNoiseScale() { - const idealCount = totalEmojis / 8; // Assuming 8 color categories - const purpleRatio = colorCounts.purple / idealCount; - const redRatio = colorCounts.red / idealCount; - const middleRatio = (colorCounts.cyan + colorCounts.green + colorCounts.yellow) / (3 * idealCount); - - if (purpleRatio < 0.5 || redRatio < 0.5) { - NOISE_SCALE *= 10.0; // Increase scale if we're not seeing enough outliers - } else if (middleRatio > 1.2) { - NOISE_SCALE *= 1.05; // Decrease scale if we're seeing too many middle colors - } - - NOISE_SCALE = constrain(NOISE_SCALE, 0.001, 0.01); - } - -/** - * Handle mouse dragging to update offsets - */ -function mouseDragged() { - xOffset += (pmouseX - mouseX) * 0.4; - yOffset += (pmouseY - mouseY) * 0.4; -} - -/** - * Handle window resizing - */ -function windowResized() { - resizeCanvas(windowWidth, windowHeight); -} \ No newline at end of file diff --git a/src/javascript/Heatmap-v4.js b/src/javascript/Heatmap-v4.js deleted file mode 100644 index f330350..0000000 --- a/src/javascript/Heatmap-v4.js +++ /dev/null @@ -1,172 +0,0 @@ -/** - * - * EmojiHeatmap: A dynamic, interactive display of emojis that shift - * with mouse movement, creating a detailed color-coordinated heatmap. - * - * Based on original work by Jonas Kjeldmand Jensen, July 2024 - * - */ - -// Global variables -let xOffset = 0; -let yOffset = 0; -const FONT_SIZE = 16; -const NOISE_SCALE = 0.006; -const EMOJI_CATEGORIES = { - blue: [], - cyan: [], - green: [], - yellow: [], - orange: [], - red: [], - purple: [], - magenta: [], - }; - -/** - * Setup function to initialize the canvas and categorize emojis - */ -function setup() { - createCanvas(windowWidth, windowHeight); - textSize(FONT_SIZE); - textAlign(CENTER, CENTER); - categorizeEmojis(); -} - -/** - * Categorize emojis based on their prominent colors - */ -function categorizeEmojis() { - const emojiRanges = [ - [0x1F300, 0x1F5FF], - [0x1F600, 0x1F64F], - [0x1F680, 0x1F6FF], - [0x1F900, 0x1F9FF], - [0x2600, 0x26FF], - [0x2700, 0x27BF], - [0x1F400, 0x1F4FF] - ]; - - for (let range of emojiRanges) { - for (let code = range[0]; code <= range[1]; code++) { - const emoji = String.fromCodePoint(code); - const category = getEmojiCategory(emoji); - if (category) { - EMOJI_CATEGORIES[category].push(emoji); - } - } - } - - // Ensure each category has at least one emoji - for (let category in EMOJI_CATEGORIES) { - if (EMOJI_CATEGORIES[category].length === 0) { - EMOJI_CATEGORIES[category].push('โ“'); - } - } -} - -/** - * Determine the category of an emoji based on its prominent color - * This is a simplified version and may not be 100% accurate - * @param {string} emoji - The emoji character - * @returns {string|null} The category name or null if not categorized - */ -function getEmojiCategory(emoji) { - const purple ='๐Ÿ˜ˆ๐Ÿ‘ฟ๐Ÿ’Ÿ๐Ÿ’œ๐Ÿ‘พ๐Ÿ‡๐Ÿ†๐ŸŒ‚๐ŸŽ†๐Ÿช๐Ÿ”ฎ๐Ÿงฟ๐ŸŸช๐ŸŸฃ' ; - const magenta = '๐Ÿ’˜๐Ÿ’๐Ÿ’–๐Ÿ’—๐Ÿ’“๐Ÿ’ž๐Ÿ’•๐Ÿง ๐Ÿซ€๐Ÿซ๐Ÿ‘…๐Ÿ‘„๐Ÿซฆ๐Ÿ’…๐Ÿ‘ฉโ€๐ŸŽค๐Ÿงžโ€โ™€๏ธ๐Ÿ„โ€โ™€๏ธ๐Ÿฆ„๐Ÿท๐Ÿ–๐Ÿฝ๐Ÿฆฉ๐Ÿ™๐Ÿชฑ๐ŸŒธ๐Ÿ’ฎ๐Ÿชท๐ŸŒท๐Ÿ ๐Ÿฃ๐Ÿค๐Ÿญ๐Ÿฌ๐Ÿ’’๐Ÿฉ๐Ÿ’ˆ๐ŸŽ€๐ŸŽŸ๏ธ๐Ÿ‘™๐Ÿ‘š๐Ÿ‘›๐Ÿ›๏ธ๐Ÿงฌ๐Ÿงซ๐Ÿณ๏ธโ€โšง๏ธ๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽค๐Ÿ„๐Ÿปโ€โ™€๏ธ' ; - const blueEmojis = '๐Ÿ’™๐Ÿ’ฆ๐Ÿ’ค๐Ÿงžโ€โ™‚๏ธ๐Ÿฆ•๐Ÿณ๐Ÿ‹๐Ÿฌ๐ŸŸ๐Ÿฆˆ๐Ÿฆ‹๐Ÿชบ๐Ÿซ๐ŸงŠ๐Ÿฅฃ๐ŸŒ๐ŸŒŽ๐ŸŒ๐ŸŒ๐Ÿ—บ๏ธ๐Ÿ—พ๐Ÿž๏ธ๐ŸŒƒ๐Ÿ™๏ธ๐Ÿš†๐ŸšŽ๐ŸŽ‘๐Ÿš™โ›ด๏ธ๐Ÿ’บ๐Ÿ›ฌ๐Ÿ’ง๐ŸŒŠ๐ŸŒ€๐Ÿฅ๐Ÿงฟ๐Ÿชฌ๐Ÿงต๐Ÿ‘”๐Ÿ‘•๐Ÿ‘–๐Ÿงข๐Ÿ’Ž๐Ÿ“ช๐Ÿ—ณ๏ธ๐Ÿ›—๐Ÿ›‹๏ธ๐Ÿ“˜๐Ÿชฃ๐Ÿฉป๐ŸŸฆ๐Ÿ”ต๐Ÿ”ท๐Ÿ”น'; - const cyanEmojis = '๐Ÿฆœ๐Ÿ ๐Ÿฌ๐ŸŒŠ๐Ÿฆˆ๐Ÿฅถ๐Ÿ‹๐Ÿณ๐ŸŸ๐Ÿฌ๐Ÿ’Ž๐Ÿ”ท๐Ÿ’ ๐ŸŽฝ'; - const greenEmojis = '๐ŸŒฟ๐Ÿ€๐ŸŒฑ๐ŸŒฒ๐Ÿฅฌ๐Ÿฅฆ๐Ÿธ๐Ÿ’š๐ŸŸข๐Ÿงช๐Ÿฅ๐Ÿ๐ŸฆŽ๐ŸŠ๐Ÿข๐Ÿƒ๐Ÿฅ—๐Ÿง‘โ€๐ŸŒพ'; - const yellowEmojis = '๐ŸŒป๐ŸŒŸ๐Ÿ‹๐ŸŒ๐Ÿฅ๐Ÿ’›๐ŸŸจ๐Ÿ†๐ŸŒ•๐Ÿ”ถโ˜€๏ธ๐ŸŒž๐Ÿฏ๐Ÿค๐Ÿš•๐Ÿโญ๐ŸŒผ๐Ÿง€'; - const orangeEmojis = '๐ŸŠ๐ŸŽƒ๐Ÿฆ๐Ÿ”ถ๐ŸŸง๐ŸŸ ๐Ÿ‘๐Ÿฅ•๐ŸฆŠ๐Ÿงก๐Ÿ๐Ÿฆ’๐Ÿ…๐Ÿฅญ๐Ÿงณ๐Ÿ”ธ๐Ÿฆบ๐Ÿ€๐Ÿšผ'; - const redEmojis = '๐ŸŽ๐Ÿ“๐ŸŒนโค๏ธ๐Ÿ”ด๐ŸŸฅ๐Ÿฎ๐Ÿšจ๐Ÿ‘น๐Ÿž๐Ÿ…๐ŸŒถ๏ธ๐Ÿ’๐Ÿฆž๐Ÿฆ€๐Ÿ†˜๐Ÿงจ๐Ÿš—'; - - if (purple.includes(emoji)) return 'purple'; - if (magenta.includes(emoji)) return 'magenta'; - if (blueEmojis.includes(emoji)) return 'blue'; - if (cyanEmojis.includes(emoji)) return 'cyan'; - if (greenEmojis.includes(emoji)) return 'green'; - if (yellowEmojis.includes(emoji)) return 'yellow'; - if (orangeEmojis.includes(emoji)) return 'orange'; - if (redEmojis.includes(emoji)) return 'red'; - return null; -} - -/** - * Draw function to render emojis on the canvas - */ -function draw() { - background(220); - - const time = frameCount * 0.01; - - for (let x = 0; x < width; x += FONT_SIZE) { - for (let y = 0; y < height; y += FONT_SIZE) { - const noiseValue = calculateNoiseValue(x, y, time); - const emoji = getEmojiFromNoiseValue(noiseValue); - text(emoji, x, y); - } - } -} - -/** - * Calculate Perlin noise value for given coordinates and time - * @param {number} x - X coordinate - * @param {number} y - Y coordinate - * @param {number} time - Time factor for animation - * @returns {number} Noise value between 0 and 1 - */ -function calculateNoiseValue(x, y, time) { - return noise((x + xOffset) * NOISE_SCALE, (y + yOffset) * NOISE_SCALE, time); -} - -/** - * Get emoji character based on noise value - * @param {number} noiseValue - Perlin noise value between 0 and 1 - * @returns {string} Emoji character - */ -function getEmojiFromNoiseValue(noiseValue) { - let category; - if (noiseValue < 0.125) { - category = 'blue'; - } else if (noiseValue < 0.25) { - category = 'cyan'; - } else if (noiseValue < 0.375) { - category = 'green'; - } else if (noiseValue < 0.5) { - category = 'yellow'; - } else if (noiseValue < 0.625) { - category = 'orange'; - } else if (noiseValue < 0.75) { - category = 'red'; - } else if (noiseValue < 0.875) { - category = 'purple'; - } else { - category = 'magenta'; - } - - const categoryEmojis = EMOJI_CATEGORIES[category]; - - // Ensure the index is within bounds of the categoryEmojis array - const normalizedNoiseValue = map(noiseValue, 0, 1, 0, categoryEmojis.length - 1); - const index = floor(normalizedNoiseValue); - - // Return an emoji from the selected category based on the index - return categoryEmojis[index]; -} - - -/** - * Handle mouse dragging to update offsets - */ -function mouseDragged() { - xOffset += (pmouseX - mouseX) * 0.4; - yOffset += (pmouseY - mouseY) * 0.4; -} - -/** - * Handle window resizing - */ -function windowResized() { - resizeCanvas(windowWidth, windowHeight); -} \ No newline at end of file diff --git a/src/javascript/full-heatmap(not working due to emojis).js b/src/javascript/full-heatmap(not working due to emojis).js deleted file mode 100644 index 7dc9cde..0000000 --- a/src/javascript/full-heatmap(not working due to emojis).js +++ /dev/null @@ -1,152 +0,0 @@ -/** - * - * EmojiHeatmap: A dynamic, interactive display of emojis that shift - * with mouse movement, creating a detailed color-coordinated heatmap. - * - * Based on original work by Jonas Kjeldmand Jensen, July 2024 - * - */ - -// Global variables -let xOffset = 0; -let yOffset = 0; -let mouseSensitivity = 0.4; -const FONT_SIZE = 16; -const NOISE_SCALE = 0.005; -const EMOJI_CATEGORIES = { - deeppurple: '๐Ÿซ‚๐Ÿ‘ฅ๐Ÿ‘ค๐Ÿ—ฃ๏ธ๐Ÿ‘ฃ๐ŸŽ‡๐ŸŽ†๐Ÿ”ฎ๐ŸŒƒ๐ŸŒ†๐ŸŽฎ๐Ÿ’ฃ๐Ÿ•น๏ธโ™Ÿ๏ธ๐Ÿ““๐Ÿ”Œ๐Ÿ•‹๐Ÿ—„๏ธ๐ŸŽฌ๐ŸŒฉ๏ธโ›ˆ๏ธ', - purple: '๐Ÿ˜ˆ๐Ÿ‘ฟ๐Ÿ’Ÿ๐Ÿ’œ๐Ÿง•๐Ÿˆโ€โฌ›๐Ÿพ๐Ÿ•ท๏ธ๐Ÿœ๐Ÿคฉ๐Ÿ‡๐Ÿ†๐Ÿ˜Ž๐Ÿท๐ŸŒš๐ŸŒ˜๐ŸŒ‚๐Ÿง๐Ÿ‘พโ˜‚๏ธโ˜”๐Ÿช€๐Ÿงค๐Ÿ–จ๏ธ๐Ÿ“ฒ๐Ÿ“ฑ๐Ÿ–ฒ๏ธ๐Ÿ“ผ๐ŸŽฅ๐Ÿ“”๐Ÿ“ธ๐Ÿ—œ๏ธ๐Ÿ”™๐Ÿ”š๐Ÿ”›๐Ÿ”œ๐Ÿ”โœ–๏ธโž•โž–โž—๐ŸŸฐโ˜‘๏ธโœ”๏ธโžฐโžฟ๐ŸŸฃ๐ŸŸช๐Ÿง•๐Ÿฟ๐Ÿง•๐Ÿผ', - lightpurple: '๐Ÿ›โš›๏ธ๐Ÿ•‰๏ธโœก๏ธโ˜ธ๏ธโ˜ฏ๏ธโœ๏ธโ˜ฆ๏ธโ˜ช๏ธโ˜ฎ๏ธ๐Ÿ•Ž๐Ÿ”ฏโ™ˆโ™‰โ™Šโ™‹โ™Œโ™๐Ÿฅณโ™Žโ™โ™โ™‘โ™’โ™“โ›Žโšง๏ธ๐ŸŸช๐Ÿšบ๐Ÿ’ท๐Ÿช„๐ŸŽฒ๐Ÿคน๐Ÿป๐Ÿคน๐Ÿผโ€โ™€๏ธ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฟ๐Ÿ‘ญ๐Ÿผ๐Ÿซ๐Ÿฅ˜๐Ÿ—ป๐Ÿ’พ๐Ÿณโ›ธ๏ธโŒš๐Ÿ›ฐ๏ธ๐Ÿฅ๐Ÿ›น๐Ÿค–๐Ÿฑ', - magenta: '๐Ÿฆ„๐Ÿฆฉ๐ŸŒท๐ŸŒบ๐Ÿชท๐ŸŒธ๐Ÿ’ฎ๐Ÿชฑ๐Ÿ™๐Ÿฅฐ๐Ÿ˜๐Ÿ’—๐Ÿฆœ๐Ÿ–๐Ÿ˜œ๐Ÿคช๐Ÿท๐Ÿฝ๐Ÿ ๐Ÿ’—๐Ÿซ•๐Ÿง๐Ÿฆ‘๐Ÿง๐Ÿญ๐Ÿฅค๐Ÿง ๐Ÿซ€๐Ÿ‘…๐Ÿ‘„๐Ÿซฆ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ๐Ÿ’‘๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿ’๐Ÿ’๐Ÿ“๐Ÿช…๐Ÿช†๐ŸŽด๐ŸŽจ๐Ÿ€„๐ŸŽฐ๐Ÿ‘š๐Ÿ‘›๐Ÿ‘™๐Ÿฉฑ๐Ÿฉฐ๐Ÿ’„๐Ÿช—๐Ÿ“๐Ÿช›๐Ÿซง๐Ÿงผ๐Ÿณ๏ธโ€โšง๏ธ๐Ÿ’๐Ÿป๐Ÿ’๐Ÿผ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ', - darkblue: '๐Ÿ’™๐ŸŠโ€โ™€๏ธ๐ŸŠโ€โ™‚๏ธ๐ŸŠ๐ŸŸ๐Ÿฌ๐Ÿฅฃ๐ŸงŠ๐ŸŒ๐ŸŒŽ๐ŸŒ๐Ÿ—บ๏ธ๐Ÿš๐Ÿ›ข๏ธโ›ด๏ธโ›ˆ๏ธ๐ŸŒฉ๏ธ๐ŸŒŠ๐ŸŒ€๐ŸŒŒ๐Ÿงฟ๐Ÿ‘”๐Ÿ”๐Ÿ›Œ๐Ÿ”Ž๐Ÿ“ซ๐Ÿ“ช๐Ÿ“ญ๐Ÿ“ฌ๐Ÿ–‹๏ธ๐Ÿ–Š๏ธ๐Ÿš๐Ÿฉน๐Ÿช’๐Ÿฉป๐Ÿชฃ๐Ÿ›๏ธ๐Ÿ›‹๏ธ๐Ÿ”ต๐Ÿ”ทโ„๏ธ๐Ÿฉด๐Ÿ”น๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿญ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿญ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿญ๐Ÿ‘จ๐Ÿฝโ€๐Ÿญ๐Ÿง‘๐Ÿฝโ€๐Ÿญ๐Ÿง‘๐Ÿปโ€๐Ÿญ๐Ÿซƒ๐Ÿฟ๐Ÿฆธ๐Ÿป๐Ÿฆธ๐Ÿผโ€โ™‚๏ธ๐Ÿฆธ๐Ÿฝโ€โ™€๏ธ๐Ÿชข๐Ÿงถ๐Ÿงต๐Ÿง™๐Ÿฟ๐ŸŠ๐Ÿฟ๐ŸŠ๐Ÿฟโ€โ™‚๏ธ๐ŸŠ๐Ÿป๐Ÿฉบ๐Ÿงฟ๐Ÿ’บ๐Ÿงข๐Ÿช’๐ŸŠ๐Ÿฝ๐ŸŠ๐Ÿป๐Ÿ•บ๐Ÿฟ๐Ÿ•บ๐Ÿพ๐Ÿ•บ๐Ÿป๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿญ', - lightblue: '๐Ÿฅถ๐Ÿ’ฆ๐Ÿ’ค๐Ÿ™…โ€โ™‚๏ธ๐Ÿ™†โ€โ™‚๏ธ๐Ÿ’โ€โ™‚๏ธ๐Ÿ™‹โ€โ™‚๏ธ๐Ÿฆธ๐Ÿฆธโ€โ™‚๏ธ๐Ÿฆธโ€โ™€๏ธ๐Ÿšฃ๐Ÿšฃโ€โ™‚๏ธ๐Ÿšฃโ€โ™€๏ธ๐Ÿ„โ€โ™‚๏ธ๐Ÿ˜จ๐Ÿ˜ฐ๐Ÿ•บ๐Ÿ‚โ›ท๏ธ๐Ÿ’‡โ€โ™‚๏ธ๐Ÿ‘ฉโ€๐Ÿ”ง๐Ÿง‘โ€๐Ÿ”ง๐Ÿ‘ฎ๐Ÿ‘ฎโ€โ™€๏ธ๐Ÿ‘ฎโ€โ™‚๏ธ๐Ÿงž๐Ÿ‚๐Ÿคฝโ€โ™‚๏ธ๐Ÿšฃโ€โ™‚๏ธ๐Ÿคฝ๐Ÿ ๐Ÿชฐ๐Ÿ›ก๏ธ๐Ÿซ—๐Ÿฅƒ๐Ÿซ™๐Ÿž๏ธ๐ŸŒ๐Ÿง™๐Ÿพโ€โ™€๏ธ๐Ÿง™๐Ÿฝโ€โ™€๏ธ๐Ÿง™๐Ÿผโ€โ™€๏ธ๐Ÿง™๐Ÿปโ€โ™€๏ธ๐Ÿง™๐Ÿฟโ€โ™€๏ธ๐Ÿง™๐Ÿป๐Ÿ‘ฎ๐Ÿป๐Ÿ‘ฎ๐Ÿฟ๐Ÿ‘ฎ๐Ÿปโ€โ™‚๏ธ๐Ÿ‘ฎ๐Ÿฟโ€โ™‚๏ธ๐Ÿ‘ฎ๐Ÿฝโ€โ™€๏ธ๐Ÿ‘ฎ๐Ÿฟโ€โ™€๏ธ๐Ÿ‘ฎ๐Ÿพโ€โ™€๏ธ๐Ÿ‘ฎ๐Ÿฟโ€โ™‚๏ธ๐Ÿ‘ฎ๐Ÿผโ€โ™€๏ธ๐Ÿš๐Ÿงณโš“๐Ÿ’บ๐Ÿ›ข๏ธ๐Ÿ›ฅ๏ธโ›ด๏ธ๐Ÿ›ด๐Ÿฌ๐Ÿš‰๐Ÿš™๐Ÿš๐Ÿชก๐ŸŽญ๐Ÿชฌ๐ŸŽโšฝ๐Ÿธ๐Ÿฅฝ๐Ÿ‘–๐Ÿ‘—๐Ÿ‘˜๐Ÿฅฟ๐Ÿ›๏ธ๐Ÿ’Ž๐Ÿ“˜๐Ÿ’ถ๐Ÿ’‰๐Ÿงซ๐Ÿ›—๐Ÿ’ณ๐Ÿ‘“โ™พ๏ธโš•๏ธ๐Ÿ™…๐Ÿปโ€โ™‚๏ธ๐Ÿคท๐Ÿปโ€โ™‚๏ธ๐Ÿ‘จ๐Ÿผโ€๐Ÿ”ง๐Ÿง‘๐Ÿปโ€๐Ÿญ๐Ÿ‘ฎ๐Ÿพโ€โ™‚๏ธ๐Ÿ‘ฎ๐Ÿพโ€โ™€๏ธ๐Ÿ‘ฎ๐Ÿปโ€โ™€๏ธ๐Ÿง™๐Ÿผโ€โ™€๏ธ๐Ÿง™๐Ÿปโ€โ™€๏ธ๐Ÿงš๐Ÿผโ€โ™‚๏ธ๐Ÿงš๐Ÿฝโ€โ™‚๏ธ๐Ÿฆธ๐Ÿฝโ€โ™‚๏ธ๐Ÿฆธ๐Ÿผโ€โ™‚๏ธ๐Ÿšฃ๐Ÿผโ€โ™‚๏ธ๐Ÿ„๐Ÿผโ€โ™‚๏ธ๐Ÿ„๐Ÿพโ€โ™‚๏ธ๐Ÿ„๐Ÿผโ€โ™€๏ธ๐Ÿšฃ๐Ÿพโ€โ™€๏ธ๐Ÿคฝ๐Ÿป', - cyan: 'โšฝ๐Ÿ ๐Ÿฌ๐ŸŒŠ๐Ÿ„โ€โ™‚๏ธ๐Ÿ‹๐Ÿชž๐Ÿณ๐ŸงŸ๐ŸงŸโ€โ™‚๏ธ๐ŸงŸโ€โ™€๏ธ๐ŸŸ๐Ÿฌ๐Ÿ’Ž๐Ÿงณ๐Ÿ’ ๐ŸŒŠ๐Ÿฅ๐Ÿ˜ญ๐Ÿ˜ฑ๐Ÿณ๐Ÿ‹๐Ÿฌ๐Ÿฉฒ๐ŸŸ๐Ÿ’ป๐Ÿ–ฅ๏ธ๐ŸŒฌ๏ธ๐Ÿ‘–๐Ÿฅฃ๐Ÿš™โฒ๏ธ๐ŸŠโ€โ™‚๏ธ๐Ÿ‹๐Ÿš…๐Ÿš†๐Ÿฅถ๐Ÿ’๐ŸŽž๏ธ๐Ÿ“บโ„๏ธ๐Ÿ’ง๐ŸงŠ๐ŸŽ๐Ÿชช๐ŸŽ›๏ธ๐Ÿฉน๐Ÿง๐Ÿšฎ๐Ÿšฐโ™ฟ๐Ÿšน๐Ÿšป๐Ÿšผ๐Ÿšพ๐Ÿ›‚๐Ÿ›ƒ๐Ÿ›„๐Ÿ›…โฌ†๏ธโ†—๏ธโžก๏ธโ†˜๏ธโฌ‡๏ธโ†™๏ธโฌ…๏ธโ†–๏ธโ†ฉ๏ธโ†ช๏ธโคด๏ธโคต๏ธ๐Ÿ”ƒ๐Ÿ”€๐Ÿ”๐Ÿ”‚๐Ÿ™๏ธโ–ถ๏ธโฉโญ๏ธโฏ๏ธโ—€๏ธโชโฎ๏ธ๐Ÿ”ผโซ๐Ÿ†—๐Ÿ…ฟ๐Ÿ†™๐Ÿˆ๐Ÿˆ‚๏ธ๐ŸŸฆ๐Ÿ”ฝโฌโธ๏ธโน๏ธโบ๏ธโ๏ธ๐ŸŽฆ๐Ÿ“ถ#๏ธโƒฃ๐Ÿ†–๐Ÿ†•๐Ÿ†“๐Ÿ†’๐Ÿ”ค๐Ÿ”ฃ๐Ÿ”ข๐Ÿ”ก๐Ÿˆณ๐Ÿ’ ๐Ÿ” ๐Ÿฆธ๐Ÿป๐Ÿง™๐Ÿฝ๐Ÿง™๐Ÿพ๐Ÿง™๐Ÿฟ๐Ÿšฃ๐Ÿฟ๐Ÿšฃ๐Ÿฝ๐Ÿšฃ๐Ÿป๐Ÿ‘ฎ๐Ÿพ๐Ÿ‘ฎ๐Ÿป', - emeraldgreen: '๐Ÿฅฆ๐Ÿง†โ›ณ๐ŸŽฝ๐Ÿ‡๐ŸŒฒ๐ŸŒณ๐Ÿฅ๐Ÿซ’๐ŸŒฝ๐Ÿ“๐Ÿ’๐Ÿซ‘๐Ÿฅ’๐Ÿฆ†๐Ÿช–๐Ÿง๐Ÿ”๏ธโ›ฐ๏ธ๐Ÿข๐ŸงŒ๐ŸŒด๐ŸŒพ๐Ÿˆ๐Ÿพ๐ŸŒ„๐Ÿง๐Ÿป๐Ÿง๐Ÿพ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ๐Ÿ‘จ๐Ÿฟโ€๐Ÿซ๐Ÿง‘๐Ÿปโ€๐Ÿซ๐Ÿง‘๐Ÿพโ€๐Ÿซ๐Ÿฅ—๐Ÿ”ฐ๐Ÿ—ฝ๐Ÿ›บ๐ŸŽ„๐ŸŽ‹๐ŸŽ', - limegreen: '๐Ÿคฎ๐Ÿ‘ฝ๐Ÿค‘๐ŸŒฑ๐Ÿฆ—๐Ÿƒ๐Ÿชด๐ŸŒต๐ŸŒฟโ˜˜๏ธ๐Ÿ๐Ÿ๐Ÿฅ‘๐Ÿฅฌ๐Ÿงƒ๐Ÿธ๐Ÿ—พโ›บ๐ŸฅŽ๐Ÿ–ผ๏ธ๐Ÿงฉ๐Ÿ‘•๐Ÿฅป๐Ÿ”‹๐Ÿ“Ÿ๐Ÿ“š๐Ÿ“—๐Ÿ•๏ธ๐Ÿ–๏ธ๐Ÿ”ซโš—๏ธ๐Ÿงช๐Ÿชฆ', - peargreen: '๐Ÿงœโ€โ™‚๏ธ๐Ÿงœโ€โ™€๏ธ๐Ÿฆš๐Ÿธ๐Ÿฆ•๐ŸŠ๐ŸฆŽ๐Ÿ๐ŸŸข๐ŸŸฉ๐Ÿฒ๐Ÿ‰๐Ÿฆ–๐Ÿ€๐Ÿชฒ๐Ÿ›๐Ÿ’ฒ๐Ÿงœ๐Ÿผโ€โ™‚๏ธ๐Ÿงœ๐Ÿผ๐Ÿงœ๐Ÿฝโ€โ™€๏ธโ™ป๏ธ๐ŸŒ๐ŸŒ๐ŸŒ๐Ÿ—บ๏ธ', - chartreusgreen: '๐Ÿคข๐Ÿ’šโœ…๐Ÿšต๐Ÿšตโ€โ™‚๏ธ๐Ÿšตโ€โ™€๏ธโŽโœณ๏ธโ‡๏ธ๐Ÿˆฏ๐Ÿ’น๐Ÿœ๏ธ๐Ÿ˜๏ธ๐Ÿ‘จโ€๐Ÿผ๐Ÿฆ ๐Ÿšœ๐Ÿš›๐ŸšŽ๐Ÿšƒ๐Ÿšž๐Ÿ›ฃ๏ธ๐Ÿ›ค๏ธ๐Ÿฉณ๐Ÿก๐Ÿž๏ธ๐Ÿ ๐Ÿš๏ธ๐Ÿ˜๏ธ๐Ÿ’ต๐Ÿ’ธ๐Ÿช‚๐Ÿšƒ', - mustardyellow: '๐ŸŒญ๐Ÿ•๐Ÿ”๐Ÿ•๐Ÿฆฎ๐Ÿถ๐Ÿฆฎ๐Ÿ•โ€๐Ÿฆบ๐Ÿช๐Ÿˆ๐Ÿ†๐Ÿฆ’๐Ÿซ๐Ÿช๐Ÿˆ๐Ÿ๐ŸฆŒ๐Ÿน๐Ÿฟ๏ธ๐Ÿฆฅ๐Ÿชถ๐Ÿฆ‰๐ŸŒ๐Ÿฅ ๐Ÿฆ˜๐Ÿก๐Ÿซฅ๐Ÿชบ๐Ÿฅง๐Ÿฐ๐ŸŽ‚๐Ÿช๐Ÿฆ๐Ÿ—๐Ÿง‡๐Ÿฅž๐Ÿฅฏ๐Ÿฆช๐Ÿชน๐Ÿค ๐Ÿ๐Ÿฅ”๐Ÿ“ฆ๐Ÿง„๐Ÿง…๐Ÿฅœ๐Ÿž๐Ÿฅ๐Ÿฅ–๐Ÿซ“๐Ÿฅจ๐ŸฅŸ๐Ÿ˜๐Ÿฅฎ๐Ÿง‹๐Ÿฅš๐Ÿชƒ๐Ÿฅ™๐ŸŒฏ๐ŸŒฎ๐Ÿฅช๐Ÿ’ฐ๐Ÿช˜๐Ÿซ๐Ÿจโ›ช๐Ÿ•๐ŸšŒ๐Ÿšˆ๐Ÿšƒ๐ŸŽ ๐Ÿงธ๐Ÿงฅ๐Ÿ‘’๐Ÿ’ด๐Ÿ๐Ÿ’๐Ÿ›ทโšฑ๏ธ๐Ÿ‘œ๐Ÿ“ฟ๐Ÿ“œ๐Ÿ•ฏ๏ธ๐Ÿชค', - paradiseyellow: '๐Ÿฆณ๐Ÿฆฒ๐Ÿค™๐Ÿ‘ˆ๐Ÿ‘‰๐Ÿ‘†๐Ÿ–•๐Ÿ‘‡โ˜๏ธ๐Ÿซต๐Ÿซฑ๐Ÿซฒ๐Ÿซณ๐Ÿซด๐Ÿ‘Œ๐ŸŒ“๐ŸŒ”๐ŸŒ•๐ŸŒ–๐ŸŒ—๐ŸŒ™๐Ÿ†๐Ÿ…๐ŸŽ๐ŸŽ—๏ธ๐ŸŽซ๐ŸŽ–๏ธ๐Ÿฅ‡๐Ÿ‰๐ŸŒ›๐ŸŒœ๐ŸคŒ๐Ÿฆฑ๐Ÿฆฑ๐ŸคโœŒ๏ธ๐Ÿคž๐Ÿซฐ๐Ÿ‘‹๐Ÿคš๐Ÿ–๏ธโœ‹๐Ÿ––๐ŸคŸ๐Ÿค˜๐Ÿง’๐Ÿ‘ฆ๐Ÿ‘ง๐Ÿง‘๐Ÿ‘ฑ๐Ÿ‘จ๐Ÿง”๐Ÿง”โ€โ™‚๏ธ๐Ÿง”โ€โ™€๏ธ๐Ÿ‘จโ€๐Ÿฆฐ๐Ÿ‘จโ€๐Ÿฆฑ๐Ÿ‘จโ€๐Ÿฆฒ๐Ÿ‘ฉ๐Ÿ‘ฉโ€๐Ÿฆฑ๐Ÿง‘โ€๐Ÿฆฑโœ๏ธ๐Ÿ‘ถ๐Ÿ‘ƒ๐Ÿงญ๐Ÿฆป๐Ÿ‘‚๐Ÿฆถ๐Ÿฆต๐Ÿ’ช๐Ÿ‘๐Ÿ’›๐Ÿ‘ŽโœŠ๐Ÿ‘Š๐Ÿค›๐Ÿคœ๐Ÿ‘๐Ÿ™Œ๐Ÿซถ๐Ÿ‘โ˜€๏ธ๐ŸŒ๐ŸŒžโœจโญ๐ŸŸก๐ŸŒŸ๐Ÿคฒ๐Ÿฅ๐Ÿค๐Ÿ‘ผ๐Ÿซ”๐Ÿฃ๐ŸคโŒ›โณ๐Ÿ‘ฑโ€โ™‚๏ธ๐Ÿš•๐Ÿš–๐Ÿššโ›ต๐Ÿ›ธ๐ŸŽท๐ŸŽŠโ›ฑ๏ธ๐Ÿ‘ฑโ€โ™€๏ธ๐Ÿง‘โ€๐Ÿฆฒ๐Ÿงฝ๐Ÿช™๐Ÿ‘ทโ€โ™‚๏ธ๐Ÿง€๐Ÿ‘ทโ€โ™€๏ธ๐ŸŒป๐Ÿ‹๐Ÿงˆ๐Ÿ๐ŸŒ๐Ÿ‘ฉโ€๐Ÿฆฒ๐Ÿ“’๐Ÿ’ก๐Ÿท๏ธ๐Ÿ—‚๏ธ๐Ÿ“‚๐Ÿ“๐Ÿ”’๐Ÿ”“๐Ÿบ๐Ÿป๐Ÿฅ‚๐Ÿ—ƒ๏ธ๐Ÿ—๏ธ๐Ÿ”‘๐Ÿ”๐Ÿ”โš–๏ธ๐Ÿช๐Ÿ“ฃ๐Ÿ“ฏ๐Ÿ””๐Ÿ”•', - goldenyellow: '๐Ÿ˜€๐Ÿ˜ƒ๐Ÿ˜„๐Ÿ˜๐Ÿ˜†๐Ÿ˜…๐Ÿคฃ๐Ÿ˜‚๐Ÿ™‚๐Ÿ™ƒ๐Ÿซ ๐Ÿ˜‰๐Ÿ˜Š๐Ÿ˜‡๐Ÿ˜˜๐Ÿ˜—๐Ÿ˜š๐Ÿ˜™๐Ÿฅฒ๐Ÿ˜‹๐Ÿ˜›๐Ÿ˜๐Ÿค—๐Ÿคญ๐Ÿซข๐Ÿซฃ๐Ÿคซ๐Ÿค”๐Ÿซก๐Ÿค๐Ÿคจ๐Ÿ˜๐Ÿ˜‘๐Ÿ˜ถ๐Ÿ˜ถโ€๐ŸŒซ๏ธ๐Ÿ˜๐Ÿ˜’๐Ÿ™„๐Ÿ˜ฌ๐Ÿ˜ฎโ€๐Ÿ’จ๐Ÿคฅ๐Ÿ˜Œ๐Ÿ˜”๐Ÿ˜ช๐Ÿคค๐Ÿ˜ด๐Ÿ˜ท๐Ÿค’๐Ÿค•๐Ÿคง๐Ÿ˜ฒ๐Ÿ˜ฏ๐Ÿ˜ฎโ˜น๏ธ๐Ÿ™๐Ÿ˜Ÿ๐Ÿซค๐Ÿ˜•๐Ÿง๐Ÿค“๐Ÿคฏ๐Ÿ˜ตโ€๐Ÿ’ซ๐Ÿ˜ต๐Ÿฅด๐Ÿ˜ณ๐Ÿฅบ๐Ÿฅน๐Ÿ˜ฆ๐Ÿ˜ง๐Ÿ˜ฅ๐Ÿ˜ข๐Ÿ˜–๐Ÿ˜ฃ๐Ÿ˜ž๐Ÿ˜“๐Ÿ˜ฉ๐Ÿ˜ซ๐Ÿฅฑ๐Ÿ˜ค๐Ÿ˜ฝ๐Ÿ˜ผ๐Ÿ˜ป๐Ÿ˜น๐Ÿ˜ธ๐Ÿ˜บ๐Ÿ˜ ๐Ÿ™€๐Ÿ’ซ๐Ÿ•๏ธ๐Ÿ–๏ธ๐Ÿ—๏ธ๐Ÿ›บ๐Ÿ›Ž๏ธ๐Ÿšกโ›…๐ŸŒค๏ธ๐ŸŒฅ๏ธ๐Ÿ‘‘๐Ÿฅพ๐ŸŽบ๐Ÿ’ฝ๐Ÿ“€โš ๏ธ๐Ÿšธโ˜ฃ๏ธโ˜ข๏ธ๐Ÿ”…๐Ÿ”†โšœ๏ธ๐Ÿ”ฑ๐Ÿ”ฐใ€ฝ๏ธ๐ŸŸจ', - orange: '๐Ÿ‘ฉโ€๐Ÿฆฐ๐Ÿง‘โ€๐Ÿฆฐ๐Ÿต๏ธ๐ŸŒ†๐ŸŒ‡๐ŸŒ…โœด๏ธ๐ŸŸง๐Ÿ”ถ๐Ÿ”ธ๐ŸŸ ๐Ÿ†š๐Ÿˆท๏ธ๐Ÿˆถ๐Ÿˆš๐Ÿชธ๐Ÿ‰‘๐Ÿˆธ๐Ÿˆบ๐ŸŽ ๐Ÿššโ›ตโ˜„๏ธ๐Ÿ”ฅ๐ŸŽƒ๐ŸŽ‡๐Ÿฅ‰๐Ÿงถ๐Ÿฆบ๐Ÿ‘˜๐Ÿฉณโ˜ฃ๏ธโ˜ข๏ธ๐Ÿ“ณ๐Ÿ“ด๐ŸŽป๐Ÿฎ๐Ÿ“™๐Ÿช ๐Ÿšผ๐Ÿ€๐Ÿฑ๐ŸŠ๐Ÿคฌ๐ŸŽƒ๐Ÿฆ๐Ÿ”ถ๐ŸŸง๐ŸŸ ๐Ÿ‘๐Ÿฅ•๐ŸฆŠ๐Ÿ’ฅโค๏ธโ€๐Ÿ”ฅ๐Ÿ„๐Ÿฆง๐Ÿฆ๐Ÿฏ๐Ÿก๐Ÿต๏ธ๐Ÿ‚๐ŸŠ๐Ÿ‘๐Ÿฅ•๐Ÿฅฎ๐Ÿฅง๐Ÿบ๐Ÿœ๏ธ๐Ÿงฑ๐ŸŒ„๐Ÿงก๐Ÿ๐Ÿฆ’๐Ÿ…๐Ÿฅญ๐Ÿ™๐Ÿ”ธ๐Ÿฆบ๐Ÿ”ฅ๐Ÿค๐Ÿ€๐Ÿ๐Ÿซ…๐Ÿง–๐Ÿ‘ท๐Ÿ‘ท๐Ÿป๐Ÿ‘ท๐Ÿผ๐Ÿš๐Ÿ“ณ๐Ÿ“ด๐Ÿ‘ท๐Ÿฝ๐Ÿ‘ท๐Ÿพ๐Ÿ‘ท๐Ÿฟ๐Ÿ’๐Ÿ˜ฟ๐Ÿ˜พ๐Ÿคผ๐Ÿงฎ๐Ÿช”๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘งโœ๏ธโ›น๏ธ', - red: '๐Ÿ˜๐Ÿฅฐ๐Ÿฅต๐Ÿ˜ก๐Ÿคฌ๐Ÿคก๐Ÿ‘น๐Ÿ‘บโฃ๏ธ๐Ÿ’”โค๏ธโ€๐Ÿ”ฅโคโ€๐Ÿฉน๐Ÿ’ฏ๐Ÿ’‹๐Ÿ’ข๐Ÿ’ฅ๐Ÿ”๐Ÿ™๐Ÿž๐Ÿชฑ๐ŸŒธ๐ŸŒน๐ŸŒบ๐Ÿฅ€๐Ÿ๐Ÿ‚๐Ÿ„๐Ÿ‰๐ŸŽ๐Ÿ“๐Ÿ’๐Ÿ…๐ŸŒถ๏ธ๐Ÿฅฉ๐Ÿ–๐ŸŸ๐Ÿซ•๐Ÿฅซ๐Ÿฟ๐Ÿฃ๐Ÿฆ€๐Ÿฆž๐Ÿฆ๐Ÿฆ‘๐Ÿซ๐Ÿท๐Ÿฅค๐Ÿœ๏ธ๐Ÿงฑโ›ฉ๏ธโ™จ๏ธ๐ŸŽช๐Ÿš’๐Ÿš‚๐Ÿš—๐Ÿš˜๐ŸŽ๏ธ๐Ÿ›‘โ›ฝ๐Ÿ›ข๏ธ๐Ÿ›Ÿ๐Ÿšข๐Ÿš€๐Ÿšโฐ๐ŸŒก๏ธโ˜„๏ธ๐Ÿ”ฅ๐Ÿงจ๐Ÿงง๐ŸŽˆ๐ŸŽ๐ŸŽŸ๏ธ๐Ÿ“๐ŸฅŠ๐Ÿ›ท๐ŸŽฏ๐ŸŽด๐Ÿงถ๐Ÿงฃ๐ŸŽ’๐Ÿ‘ โ›‘๏ธ๐Ÿ“ฟ๐Ÿ’„๐ŸŽธ๐Ÿฅโ˜Ž๏ธ๐Ÿชซ๐Ÿงฎ๐Ÿฎ๐Ÿ“•๐Ÿ“ฎ๐Ÿ–๏ธ๐Ÿ“Œ๐Ÿ“โœ‚๏ธ๐Ÿช“๐Ÿงฐ๐Ÿ›ก๏ธ๐Ÿงฒ๐Ÿงซ๐Ÿฉธ๐Ÿ’Š๐Ÿงฏโ›”๐Ÿšซโ“โ—๐Ÿ“›โญ•โŒ๐Ÿ…ฐ๏ธ๐Ÿ†Ž๐Ÿ…ฑ๏ธ๐Ÿ†‘๐Ÿ…พ๏ธ๐Ÿ†˜๐Ÿ‰๐Ÿˆน๐Ÿˆฒ๐ŸˆดใŠ—๏ธใŠ™๏ธ๐Ÿˆต๐Ÿ”ด๐ŸŸฅ๐Ÿ”บ๐Ÿ”ป๐Ÿšฉ', - - }; - -/** - * Setup function to initialize the canvas - */ -function setup() { - createCanvas(windowWidth, windowHeight); - textSize(FONT_SIZE); - textAlign(CENTER, CENTER); -} - -/** - * Draw function to render emojis on the canvas - */ -function draw() { - background(220); - const time = frameCount * 0.01; - - for (let x = 0; x < width; x += FONT_SIZE) { - for (let y = 0; y < height; y += FONT_SIZE) { - const noiseValue = calculateNoiseValue(x, y, time); - const emoji = getEmojiFromNoiseValue(noiseValue); - text(emoji, x, y); - } - } -} - -/** - * Calculate Perlin noise value for given coordinates and time - * @param {number} x - X coordinate - * @param {number} y - Y coordinate - * @param {number} time - Time factor for animation - * @returns {number} Noise value between 0 and 1 - */ -function calculateNoiseValue(x, y, time) { - return noise((x + xOffset) * NOISE_SCALE, (y + yOffset) * NOISE_SCALE, time); -} - -/** - * Get emoji character based on noise value - * @param {number} noiseValue - Perlin noise value between 0 and 1 - * @returns {string} Emoji character - */ - function getEmojiFromNoiseValue(noiseValue) { - let category; - let adjustedNoiseValue; - - // Define category ranges and adjust noise values - if (noiseValue < 0.0625) { - category = 'deeppurple'; - adjustedNoiseValue = map(noiseValue, 0, 0.0625, 0, 1); - } else if (noiseValue < 0.125) { - category = 'purple'; - adjustedNoiseValue = map(noiseValue, 0.0625, 0.125, 0, 1); - } else if (noiseValue < 0.1875) { - category = 'lightpurple'; - adjustedNoiseValue = map(noiseValue, 0.125, 0.1875, 0, 1); - } else if (noiseValue < 0.25) { - category = 'magenta'; - adjustedNoiseValue = map(noiseValue, 0.1875, 0.25, 0, 1); - } else if (noiseValue < 0.3125) { - category = 'darkblue'; - adjustedNoiseValue = map(noiseValue, 0.25, 0.3125, 0, 1); - } else if (noiseValue < 0.375) { - category = 'lightblue'; - adjustedNoiseValue = map(noiseValue, 0.3125, 0.375, 0, 1); - } else if (noiseValue < 0.4375) { - category = 'cyan'; - adjustedNoiseValue = map(noiseValue, 0.375, 0.4375, 0, 1); - } else if (noiseValue < 0.5) { - category = 'emeraldgreen'; - adjustedNoiseValue = map(noiseValue, 0.4375, 0.5, 0, 1); - } else if (noiseValue < 0.5625) { - category = 'limegreen'; - adjustedNoiseValue = map(noiseValue, 0.5, 0.5625, 0, 1); - } else if (noiseValue < 0.625) { - category = 'peargreen'; - adjustedNoiseValue = map(noiseValue, 0.5625, 0.625, 0, 1); - } else if (noiseValue < 0.6875) { - category = 'chartreusgreen'; - adjustedNoiseValue = map(noiseValue, 0.625, 0.6875, 0, 1); - } else if (noiseValue < 0.75) { - category = 'mustardyellow'; - adjustedNoiseValue = map(noiseValue, 0.6875, 0.75, 0, 1); - } else if (noiseValue < 0.8125) { - category = 'paradiseyellow'; - adjustedNoiseValue = map(noiseValue, 0.75, 0.8125, 0, 1); - } else if (noiseValue < 0.875) { - category = 'goldenyellow'; - adjustedNoiseValue = map(noiseValue, 0.8125, 0.875, 0, 1); - } else { - category = 'orange'; - adjustedNoiseValue = map(noiseValue, 0.875, 1, 0, 1); - } - - const categoryEmojis = EMOJI_CATEGORIES[category]; - - // Calculate index based on adjusted noise value and category emoji length - const index = floor(adjustedNoiseValue * (categoryEmojis.length - 1)); - - return categoryEmojis[index]; -} - - - -/** - * Handle mouse dragging to update offsets - */ -function mouseDragged() { - xOffset += (pmouseX - mouseX) * mouseSensitivity; - yOffset += (pmouseY - mouseY) * mouseSensitivity; -} - -/** - * Handle window resizing - */ -function windowResized() { - resizeCanvas(windowWidth, windowHeight); -} \ No newline at end of file diff --git a/src/javascript/heatmap(not working due to emojis).js b/src/javascript/heatmap(not working due to emojis).js deleted file mode 100644 index 4b1b6fb..0000000 --- a/src/javascript/heatmap(not working due to emojis).js +++ /dev/null @@ -1,116 +0,0 @@ -/** - * - * EmojiHeatmap: A dynamic, interactive display of emojis that shift - * with mouse movement, creating a detailed color-coordinated heatmap. - * - * Modified by Claude, based on original work by Jonas Kjeldmand Jensen, July 2024 - * - */ - -// Global variables -let xOffset = 0; -let yOffset = 0; -const FONT_SIZE = 16; -const NOISE_SCALE = 0.006; -const EMOJI_CATEGORIES = [ - { color: 'deeppurple', emojis: '๐Ÿซ‚๐Ÿ‘ฅ๐Ÿ‘ค๐Ÿ—ฃ๏ธ๐Ÿ‘ฃ๐ŸŽ‡๐ŸŽ†๐Ÿ”ฎ๐ŸŒƒ๐ŸŒ†๐ŸŽฎ๐Ÿ’ฃ๐Ÿ•น๏ธโ™Ÿ๏ธ๐Ÿ““๐Ÿ”Œ๐Ÿ•‹๐Ÿ—„๏ธ๐ŸŽฌ๐ŸŒฉ๏ธโ›ˆ๏ธ' }, - { color: 'purple', emojis: '๐Ÿ˜ˆ๐Ÿ‘ฟ๐Ÿ’Ÿ๐Ÿ’œ๐Ÿง•๐Ÿˆโ€โฌ›๐Ÿพ๐Ÿ•ท๏ธ๐Ÿœ๐Ÿคฉ๐Ÿ‡๐Ÿ†๐Ÿ˜Ž๐Ÿท๐ŸŒš๐ŸŒ˜๐ŸŒ‚๐Ÿง๐Ÿ‘พโ˜‚๏ธโ˜”๐Ÿช€๐Ÿงค๐Ÿ–จ๏ธ๐Ÿ“ฒ๐Ÿ“ฑ๐Ÿ–ฒ๏ธ๐Ÿ“ผ๐ŸŽฅ๐Ÿ“”๐Ÿ“ธ๐Ÿ—œ๏ธ๐Ÿ”™๐Ÿ”š๐Ÿ”›๐Ÿ”œ๐Ÿ”โœ–๏ธโž•โž–โž—๐ŸŸฐโ˜‘๏ธโœ”๏ธโžฐโžฟ๐ŸŸฃ๐ŸŸช๐Ÿง•๐Ÿฟ๐Ÿง•๐Ÿผ' }, - { color: 'lightpurple', emojis: '๐Ÿ›โš›๏ธ๐Ÿ•‰๏ธโœก๏ธโ˜ธ๏ธโ˜ฏ๏ธโœ๏ธโ˜ฆ๏ธโ˜ช๏ธโ˜ฎ๏ธ๐Ÿ•Ž๐Ÿ”ฏโ™ˆโ™‰โ™Šโ™‹โ™Œโ™๐Ÿฅณโ™Žโ™โ™โ™‘โ™’โ™“โ›Žโšง๏ธ๐ŸŸช๐Ÿšบ๐Ÿ’ท๐Ÿช„๐ŸŽฒ๐Ÿคน๐Ÿป๐Ÿคน๐Ÿผโ€โ™€๏ธ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฟ๐Ÿ‘ญ๐Ÿผ๐Ÿซ๐Ÿฅ˜๐Ÿ—ป๐Ÿ’พ๐Ÿณโ›ธ๏ธโŒš๐Ÿ›ฐ๏ธ๐Ÿฅ๐Ÿ›น๐Ÿค–๐Ÿฑ' }, - { color: 'magenta', emojis: '๐Ÿฆ„๐Ÿฆฉ๐ŸŒท๐ŸŒบ๐Ÿชท๐ŸŒธ๐Ÿ’ฎ๐Ÿชฑ๐Ÿ™๐Ÿฅฐ๐Ÿ˜๐Ÿ’—๐Ÿฆœ๐Ÿ–๐Ÿ˜œ๐Ÿคช๐Ÿท๐Ÿฝ๐Ÿ ๐Ÿ’—๐Ÿซ•๐Ÿง๐Ÿฆ‘๐Ÿง๐Ÿญ๐Ÿฅค๐Ÿง ๐Ÿซ€๐Ÿ‘…๐Ÿ‘„๐Ÿซฆ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ๐Ÿ’‘๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿ’๐Ÿ’๐Ÿ“๐Ÿช…๐Ÿช†๐ŸŽด๐ŸŽจ๐Ÿ€„๐ŸŽฐ๐Ÿ‘š๐Ÿ‘›๐Ÿ‘™๐Ÿฉฑ๐Ÿฉฐ๐Ÿ’„๐Ÿช—๐Ÿ“๐Ÿช›๐Ÿซง๐Ÿงผ๐Ÿณ๏ธโ€โšง๏ธ๐Ÿ’๐Ÿป๐Ÿ’๐Ÿผ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ' }, - { color: 'darkblue', emojis: '๐Ÿ’™๐ŸŠโ€โ™€๏ธ๐ŸŠโ€โ™‚๏ธ๐ŸŠ๐ŸŸ๐Ÿฌ๐Ÿฅฃ๐ŸงŠ๐ŸŒ๐ŸŒŽ๐ŸŒ๐Ÿ—บ๏ธ๐Ÿš๐Ÿ›ข๏ธโ›ด๏ธโ›ˆ๏ธ๐ŸŒฉ๏ธ๐ŸŒŠ๐ŸŒ€๐ŸŒŒ๐Ÿงฟ๐Ÿ‘”๐Ÿ”๐Ÿ›Œ๐Ÿ”Ž๐Ÿ“ซ๐Ÿ“ช๐Ÿ“ญ๐Ÿ“ฌ๐Ÿ–‹๏ธ๐Ÿ–Š๏ธ๐Ÿš๐Ÿฉน๐Ÿช’๐Ÿฉป๐Ÿชฃ๐Ÿ›๏ธ๐Ÿ›‹๏ธ๐Ÿ”ต๐Ÿ”ทโ„๏ธ๐Ÿฉด๐Ÿ”น๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿญ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿญ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿญ๐Ÿ‘จ๐Ÿฝโ€๐Ÿญ๐Ÿง‘๐Ÿฝโ€๐Ÿญ๐Ÿง‘๐Ÿปโ€๐Ÿญ๐Ÿซƒ๐Ÿฟ๐Ÿฆธ๐Ÿป๐Ÿฆธ๐Ÿผโ€โ™‚๏ธ๐Ÿฆธ๐Ÿฝโ€โ™€๏ธ๐Ÿชข๐Ÿงถ๐Ÿงต๐Ÿง™๐Ÿฟ๐ŸŠ๐Ÿฟ๐ŸŠ๐Ÿฟโ€โ™‚๏ธ๐ŸŠ๐Ÿป๐Ÿฉบ๐Ÿงฟ๐Ÿ’บ๐Ÿงข๐Ÿช’๐ŸŠ๐Ÿฝ๐ŸŠ๐Ÿป๐Ÿ•บ๐Ÿฟ๐Ÿ•บ๐Ÿพ๐Ÿ•บ๐Ÿป๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿญ' }, - { color: 'lightblue', emojis: '๐Ÿฅถ๐Ÿ’ฆ๐Ÿ’ค๐Ÿ™…โ€โ™‚๏ธ๐Ÿ™†โ€โ™‚๏ธ๐Ÿ’โ€โ™‚๏ธ๐Ÿ™‹โ€โ™‚๏ธ๐Ÿฆธ๐Ÿฆธโ€โ™‚๏ธ๐Ÿฆธโ€โ™€๏ธ๐Ÿšฃ๐Ÿšฃโ€โ™‚๏ธ๐Ÿšฃโ€โ™€๏ธ๐Ÿ„โ€โ™‚๏ธ๐Ÿ˜จ๐Ÿ˜ฐ๐Ÿ•บ๐Ÿ‚โ›ท๏ธ๐Ÿ’‡โ€โ™‚๏ธ๐Ÿ‘ฉโ€๐Ÿ”ง๐Ÿง‘โ€๐Ÿ”ง๐Ÿ‘ฎ๐Ÿ‘ฎโ€โ™€๏ธ๐Ÿ‘ฎโ€โ™‚๏ธ๐Ÿงž๐Ÿ‚๐Ÿคฝโ€โ™‚๏ธ๐Ÿšฃโ€โ™‚๏ธ๐Ÿคฝ๐Ÿ ๐Ÿชฐ๐Ÿ›ก๏ธ๐Ÿซ—๐Ÿฅƒ๐Ÿซ™๐Ÿž๏ธ๐ŸŒ๐Ÿง™๐Ÿพโ€โ™€๏ธ๐Ÿง™๐Ÿฝโ€โ™€๏ธ๐Ÿง™๐Ÿผโ€โ™€๏ธ๐Ÿง™๐Ÿปโ€โ™€๏ธ๐Ÿง™๐Ÿฟโ€โ™€๏ธ๐Ÿง™๐Ÿป๐Ÿ‘ฎ๐Ÿป๐Ÿ‘ฎ๐Ÿฟ๐Ÿ‘ฎ๐Ÿปโ€โ™‚๏ธ๐Ÿ‘ฎ๐Ÿฟโ€โ™‚๏ธ๐Ÿ‘ฎ๐Ÿฝโ€โ™€๏ธ๐Ÿ‘ฎ๐Ÿฟโ€โ™€๏ธ๐Ÿ‘ฎ๐Ÿพโ€โ™€๏ธ๐Ÿ‘ฎ๐Ÿฟโ€โ™‚๏ธ๐Ÿ‘ฎ๐Ÿผโ€โ™€๏ธ๐Ÿš๐Ÿงณโš“๐Ÿ’บ๐Ÿ›ข๏ธ๐Ÿ›ฅ๏ธโ›ด๏ธ๐Ÿ›ด๐Ÿฌ๐Ÿš‰๐Ÿš™๐Ÿš๐Ÿชก๐ŸŽญ๐Ÿชฌ๐ŸŽโšฝ๐Ÿธ๐Ÿฅฝ๐Ÿ‘–๐Ÿ‘—๐Ÿ‘˜๐Ÿฅฟ๐Ÿ›๏ธ๐Ÿ’Ž๐Ÿ“˜๐Ÿ’ถ๐Ÿ’‰๐Ÿงซ๐Ÿ›—๐Ÿ’ณ๐Ÿ‘“โ™พ๏ธโš•๏ธ๐Ÿ™…๐Ÿปโ€โ™‚๏ธ๐Ÿคท๐Ÿปโ€โ™‚๏ธ๐Ÿ‘จ๐Ÿผโ€๐Ÿ”ง๐Ÿง‘๐Ÿปโ€๐Ÿญ๐Ÿ‘ฎ๐Ÿพโ€โ™‚๏ธ๐Ÿ‘ฎ๐Ÿพโ€โ™€๏ธ๐Ÿ‘ฎ๐Ÿปโ€โ™€๏ธ๐Ÿง™๐Ÿผโ€โ™€๏ธ๐Ÿง™๐Ÿปโ€โ™€๏ธ๐Ÿงš๐Ÿผโ€โ™‚๏ธ๐Ÿงš๐Ÿฝโ€โ™‚๏ธ๐Ÿฆธ๐Ÿฝโ€โ™‚๏ธ๐Ÿฆธ๐Ÿผโ€โ™‚๏ธ๐Ÿšฃ๐Ÿผโ€โ™‚๏ธ๐Ÿ„๐Ÿผโ€โ™‚๏ธ๐Ÿ„๐Ÿพโ€โ™‚๏ธ๐Ÿ„๐Ÿผโ€โ™€๏ธ๐Ÿšฃ๐Ÿพโ€โ™€๏ธ๐Ÿคฝ๐Ÿป' }, - { color: 'cyan', emojis: 'โšฝ๐Ÿ ๐Ÿฌ๐ŸŒŠ๐Ÿ„โ€โ™‚๏ธ๐Ÿ‹๐Ÿชž๐Ÿณ๐ŸงŸ๐ŸงŸโ€โ™‚๏ธ๐ŸงŸโ€โ™€๏ธ๐ŸŸ๐Ÿฌ๐Ÿ’Ž๐Ÿงณ๐Ÿ’ ๐ŸŒŠ๐Ÿฅ๐Ÿ˜ญ๐Ÿ˜ฑ๐Ÿณ๐Ÿ‹๐Ÿฌ๐Ÿฉฒ๐ŸŸ๐Ÿ’ป๐Ÿ–ฅ๏ธ๐ŸŒฌ๏ธ๐Ÿ‘–๐Ÿฅฃ๐Ÿš™โฒ๏ธ๐ŸŠโ€โ™‚๏ธ๐Ÿ‹๐Ÿš…๐Ÿš†๐Ÿฅถ๐Ÿ’๐ŸŽž๏ธ๐Ÿ“บโ„๏ธ๐Ÿ’ง๐ŸงŠ๐ŸŽ๐Ÿชช๐ŸŽ›๏ธ๐Ÿฉน๐Ÿง๐Ÿšฎ๐Ÿšฐโ™ฟ๐Ÿšน๐Ÿšป๐Ÿšผ๐Ÿšพ๐Ÿ›‚๐Ÿ›ƒ๐Ÿ›„๐Ÿ›…โฌ†๏ธโ†—๏ธโžก๏ธโ†˜๏ธโฌ‡๏ธโ†™๏ธโฌ…๏ธโ†–๏ธโ†ฉ๏ธโ†ช๏ธโคด๏ธโคต๏ธ๐Ÿ”ƒ๐Ÿ”€๐Ÿ”๐Ÿ”‚๐Ÿ™๏ธโ–ถ๏ธโฉโญ๏ธโฏ๏ธโ—€๏ธโชโฎ๏ธ๐Ÿ”ผโซ๐Ÿ†—๐Ÿ…ฟ๐Ÿ†™๐Ÿˆ๐Ÿˆ‚๏ธ๐ŸŸฆ๐Ÿ”ฝโฌโธ๏ธโน๏ธโบ๏ธโ๏ธ๐ŸŽฆ๐Ÿ“ถ#๏ธโƒฃ๐Ÿ†–๐Ÿ†•๐Ÿ†“๐Ÿ†’๐Ÿ”ค๐Ÿ”ฃ๐Ÿ”ข๐Ÿ”ก๐Ÿˆณ๐Ÿ’ ๐Ÿ” ๐Ÿฆธ๐Ÿป๐Ÿง™๐Ÿฝ๐Ÿง™๐Ÿพ๐Ÿง™๐Ÿฟ๐Ÿšฃ๐Ÿฟ๐Ÿšฃ๐Ÿฝ๐Ÿšฃ๐Ÿป๐Ÿ‘ฎ๐Ÿพ๐Ÿ‘ฎ๐Ÿป' }, - { color: 'emeraldgreen', emojis: '๐Ÿฅฆ๐Ÿง†โ›ณ๐ŸŽฝ๐Ÿ‡๐ŸŒฒ๐ŸŒณ๐Ÿฅ๐Ÿซ’๐ŸŒฝ๐Ÿ“๐Ÿ’๐Ÿซ‘๐Ÿฅ’๐Ÿฆ†๐Ÿช–๐Ÿง๐Ÿ”๏ธโ›ฐ๏ธ๐Ÿข๐ŸงŒ๐ŸŒด๐ŸŒพ๐Ÿˆ๐Ÿพ๐ŸŒ„๐Ÿง๐Ÿป๐Ÿง๐Ÿพ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ๐Ÿ‘จ๐Ÿฟโ€๐Ÿซ๐Ÿง‘๐Ÿปโ€๐Ÿซ๐Ÿง‘๐Ÿพโ€๐Ÿซ๐Ÿฅ—๐Ÿ”ฐ๐Ÿ—ฝ๐Ÿ›บ๐ŸŽ„๐ŸŽ‹๐ŸŽ' }, - { color: 'limegreen', emojis: '๐Ÿคฎ๐Ÿ‘ฝ๐Ÿค‘๐ŸŒฑ๐Ÿฆ—๐Ÿƒ๐Ÿชด๐ŸŒต๐ŸŒฟโ˜˜๏ธ๐Ÿ๐Ÿ๐Ÿฅ‘๐Ÿฅฌ๐Ÿงƒ๐Ÿธ๐Ÿ—พโ›บ๐ŸฅŽ๐Ÿ–ผ๏ธ๐Ÿงฉ๐Ÿ‘•๐Ÿฅป๐Ÿ”‹๐Ÿ“Ÿ๐Ÿ“š๐Ÿ“—๐Ÿ•๏ธ๐Ÿ–๏ธ๐Ÿ”ซโš—๏ธ๐Ÿงช๐Ÿชฆ' }, - { color: 'peargreen', emojis: '๐Ÿงœโ€โ™‚๏ธ๐Ÿงœโ€โ™€๏ธ๐Ÿฆš๐Ÿธ๐Ÿฆ•๐ŸŠ๐ŸฆŽ๐Ÿ๐ŸŸข๐ŸŸฉ๐Ÿฒ๐Ÿ‰๐Ÿฆ–๐Ÿ€๐Ÿชฒ๐Ÿ›๐Ÿ’ฒ๐Ÿงœ๐Ÿผโ€โ™‚๏ธ๐Ÿงœ๐Ÿผ๐Ÿงœ๐Ÿฝโ€โ™€๏ธโ™ป๏ธ๐ŸŒ๐ŸŒ๐ŸŒ๐Ÿ—บ๏ธ' }, - { color: 'chartreusgreen', emojis: '๐Ÿคข๐Ÿ’šโœ…๐Ÿšต๐Ÿšตโ€โ™‚๏ธ๐Ÿšตโ€โ™€๏ธโŽโœณ๏ธโ‡๏ธ๐Ÿˆฏ๐Ÿ’น๐Ÿœ๏ธ๐Ÿ˜๏ธ๐Ÿ‘จโ€๐Ÿผ๐Ÿฆ ๐Ÿšœ๐Ÿš›๐ŸšŽ๐Ÿšƒ๐Ÿšž๐Ÿ›ฃ๏ธ๐Ÿ›ค๏ธ๐Ÿฉณ๐Ÿก๐Ÿž๏ธ๐Ÿ ๐Ÿš๏ธ๐Ÿ˜๏ธ๐Ÿ’ต๐Ÿ’ธ๐Ÿช‚๐Ÿšƒ' }, - { color: 'mustardyellow', emojis: '๐ŸŒญ๐Ÿ•๐Ÿ”๐Ÿ•๐Ÿฆฎ๐Ÿถ๐Ÿฆฎ๐Ÿ•โ€๐Ÿฆบ๐Ÿช๐Ÿˆ๐Ÿ†๐Ÿฆ’๐Ÿซ๐Ÿช๐Ÿˆ๐Ÿ๐ŸฆŒ๐Ÿน๐Ÿฟ๏ธ๐Ÿฆฅ๐Ÿชถ๐Ÿฆ‰๐ŸŒ๐Ÿฅ ๐Ÿฆ˜๐Ÿก๐Ÿซฅ๐Ÿชบ๐Ÿฅง๐Ÿฐ๐ŸŽ‚๐Ÿช๐Ÿฆ๐Ÿ—๐Ÿง‡๐Ÿฅž๐Ÿฅฏ๐Ÿฆช๐Ÿชน๐Ÿค ๐Ÿ๐Ÿฅ”๐Ÿ“ฆ๐Ÿง„๐Ÿง…๐Ÿฅœ๐Ÿž๐Ÿฅ๐Ÿฅ–๐Ÿซ“๐Ÿฅจ๐ŸฅŸ๐Ÿ˜๐Ÿฅฎ๐Ÿง‹๐Ÿฅš๐Ÿชƒ๐Ÿฅ™๐ŸŒฏ๐ŸŒฎ๐Ÿฅช๐Ÿ’ฐ๐Ÿช˜๐Ÿซ๐Ÿจโ›ช๐Ÿ•๐ŸšŒ๐Ÿšˆ๐Ÿšƒ๐ŸŽ ๐Ÿงธ๐Ÿงฅ๐Ÿ‘’๐Ÿ’ด๐Ÿ๐Ÿ’๐Ÿ›ทโšฑ๏ธ๐Ÿ‘œ๐Ÿ“ฟ๐Ÿ“œ๐Ÿ•ฏ๏ธ๐Ÿชค' }, - { color: 'paradiseyellow', emojis: '๐Ÿฆณ๐Ÿฆฒ๐Ÿค™๐Ÿ‘ˆ๐Ÿ‘‰๐Ÿ‘†๐Ÿ–•๐Ÿ‘‡โ˜๏ธ๐Ÿซต๐Ÿซฑ๐Ÿซฒ๐Ÿซณ๐Ÿซด๐Ÿ‘Œ๐ŸŒ“๐ŸŒ”๐ŸŒ•๐ŸŒ–๐ŸŒ—๐ŸŒ™๐Ÿ†๐Ÿ…๐ŸŽ๐ŸŽ—๏ธ๐ŸŽซ๐ŸŽ–๏ธ๐Ÿฅ‡๐Ÿ‰๐ŸŒ›๐ŸŒœ๐ŸคŒ๐Ÿฆฑ๐Ÿฆฑ๐ŸคโœŒ๏ธ๐Ÿคž๐Ÿซฐ๐Ÿ‘‹๐Ÿคš๐Ÿ–๏ธโœ‹๐Ÿ––๐ŸคŸ๐Ÿค˜๐Ÿง’๐Ÿ‘ฆ๐Ÿ‘ง๐Ÿง‘๐Ÿ‘ฑ๐Ÿ‘จ๐Ÿง”๐Ÿง”โ€โ™‚๏ธ๐Ÿง”โ€โ™€๏ธ๐Ÿ‘จโ€๐Ÿฆฐ๐Ÿ‘จโ€๐Ÿฆฑ๐Ÿ‘จโ€๐Ÿฆฒ๐Ÿ‘ฉ๐Ÿ‘ฉโ€๐Ÿฆฑ๐Ÿง‘โ€๐Ÿฆฑโœ๏ธ๐Ÿ‘ถ๐Ÿ‘ƒ๐Ÿงญ๐Ÿฆป๐Ÿ‘‚๐Ÿฆถ๐Ÿฆต๐Ÿ’ช๐Ÿ‘๐Ÿ’›๐Ÿ‘ŽโœŠ๐Ÿ‘Š๐Ÿค›๐Ÿคœ๐Ÿ‘๐Ÿ™Œ๐Ÿซถ๐Ÿ‘โ˜€๏ธ๐ŸŒ๐ŸŒžโœจโญ๐ŸŸก๐ŸŒŸ๐Ÿคฒ๐Ÿฅ๐Ÿค๐Ÿ‘ผ๐Ÿซ”๐Ÿฃ๐ŸคโŒ›โณ๐Ÿ‘ฑโ€โ™‚๏ธ๐Ÿš•๐Ÿš–๐Ÿššโ›ต๐Ÿ›ธ๐ŸŽท๐ŸŽŠโ›ฑ๏ธ๐Ÿ‘ฑโ€โ™€๏ธ๐Ÿง‘โ€๐Ÿฆฒ๐Ÿงฝ๐Ÿช™๐Ÿ‘ทโ€โ™‚๏ธ๐Ÿง€๐Ÿ‘ทโ€โ™€๏ธ๐ŸŒป๐Ÿ‹๐Ÿงˆ๐Ÿ๐ŸŒ๐Ÿ‘ฉโ€๐Ÿฆฒ๐Ÿ“’๐Ÿ’ก๐Ÿท๏ธ๐Ÿ—‚๏ธ๐Ÿ“‚๐Ÿ“๐Ÿ”’๐Ÿ”“๐Ÿบ๐Ÿป๐Ÿฅ‚๐Ÿ—ƒ๏ธ๐Ÿ—๏ธ๐Ÿ”‘๐Ÿ”๐Ÿ”โš–๏ธ๐Ÿช๐Ÿ“ฃ๐Ÿ“ฏ๐Ÿ””๐Ÿ”•' }, - { color: 'goldenyellow', emojis: '๐Ÿ˜€๐Ÿ˜ƒ๐Ÿ˜„๐Ÿ˜๐Ÿ˜†๐Ÿ˜…๐Ÿคฃ๐Ÿ˜‚๐Ÿ™‚๐Ÿ™ƒ๐Ÿซ ๐Ÿ˜‰๐Ÿ˜Š๐Ÿ˜‡๐Ÿ˜˜๐Ÿ˜—๐Ÿ˜š๐Ÿ˜™๐Ÿฅฒ๐Ÿ˜‹๐Ÿ˜›๐Ÿ˜๐Ÿค—๐Ÿคญ๐Ÿซข๐Ÿซฃ๐Ÿคซ๐Ÿค”๐Ÿซก๐Ÿค๐Ÿคจ๐Ÿ˜๐Ÿ˜‘๐Ÿ˜ถ๐Ÿ˜ถโ€๐ŸŒซ๏ธ๐Ÿ˜๐Ÿ˜’๐Ÿ™„๐Ÿ˜ฌ๐Ÿ˜ฎโ€๐Ÿ’จ๐Ÿคฅ๐Ÿ˜Œ๐Ÿ˜”๐Ÿ˜ช๐Ÿคค๐Ÿ˜ด๐Ÿ˜ท๐Ÿค’๐Ÿค•๐Ÿคง๐Ÿ˜ฒ๐Ÿ˜ฏ๐Ÿ˜ฎโ˜น๏ธ๐Ÿ™๐Ÿ˜Ÿ๐Ÿซค๐Ÿ˜•๐Ÿง๐Ÿค“๐Ÿคฏ๐Ÿ˜ตโ€๐Ÿ’ซ๐Ÿ˜ต๐Ÿฅด๐Ÿ˜ณ๐Ÿฅบ๐Ÿฅน๐Ÿ˜ฆ๐Ÿ˜ง๐Ÿ˜ฅ๐Ÿ˜ข๐Ÿ˜–๐Ÿ˜ฃ๐Ÿ˜ž๐Ÿ˜“๐Ÿ˜ฉ๐Ÿ˜ซ๐Ÿฅฑ๐Ÿ˜ค๐Ÿ˜ฝ๐Ÿ˜ผ๐Ÿ˜ป๐Ÿ˜น๐Ÿ˜ธ๐Ÿ˜บ๐Ÿ˜ ๐Ÿ™€๐Ÿ’ซ๐Ÿ•๏ธ๐Ÿ–๏ธ๐Ÿ—๏ธ๐Ÿ›บ๐Ÿ›Ž๏ธ๐Ÿšกโ›…๐ŸŒค๏ธ๐ŸŒฅ๏ธ๐Ÿ‘‘๐Ÿฅพ๐ŸŽบ๐Ÿ’ฝ๐Ÿ“€โš ๏ธ๐Ÿšธโ˜ฃ๏ธโ˜ข๏ธ๐Ÿ”…๐Ÿ”†โšœ๏ธ๐Ÿ”ฑ๐Ÿ”ฐใ€ฝ๏ธ๐ŸŸจ' }, - { color: 'orange', emojis: '๐Ÿ‘ฉโ€๐Ÿฆฐ๐Ÿง‘โ€๐Ÿฆฐ๐Ÿต๏ธ๐ŸŒ†๐ŸŒ‡๐ŸŒ…โœด๏ธ๐ŸŸง๐Ÿ”ถ๐Ÿ”ธ๐ŸŸ ๐Ÿ†š๐Ÿˆท๏ธ๐Ÿˆถ๐Ÿˆš๐Ÿชธ๐Ÿ‰‘๐Ÿˆธ๐Ÿˆบ๐ŸŽ ๐Ÿššโ›ตโ˜„๏ธ๐Ÿ”ฅ๐ŸŽƒ๐ŸŽ‡๐Ÿฅ‰๐Ÿงถ๐Ÿฆบ๐Ÿ‘˜๐Ÿฉณโ˜ฃ๏ธโ˜ข๏ธ๐Ÿ“ณ๐Ÿ“ด๐ŸŽป๐Ÿฎ๐Ÿ“™๐Ÿช ๐Ÿšผ๐Ÿ€๐Ÿฑ๐ŸŠ๐Ÿคฌ๐ŸŽƒ๐Ÿฆ๐Ÿ”ถ๐ŸŸง๐ŸŸ ๐Ÿ‘๐Ÿฅ•๐ŸฆŠ๐Ÿ’ฅโค๏ธโ€๐Ÿ”ฅ๐Ÿ„๐Ÿฆง๐Ÿฆ๐Ÿฏ๐Ÿก๐Ÿต๏ธ๐Ÿ‚๐ŸŠ๐Ÿ‘๐Ÿฅ•๐Ÿฅฎ๐Ÿฅง๐Ÿบ๐Ÿœ๏ธ๐Ÿงฑ๐ŸŒ„๐Ÿงก๐Ÿ๐Ÿฆ’๐Ÿ…๐Ÿฅญ๐Ÿ™๐Ÿ”ธ๐Ÿฆบ๐Ÿ”ฅ๐Ÿค๐Ÿ€๐Ÿ๐Ÿซ…๐Ÿง–๐Ÿ‘ท๐Ÿ‘ท๐Ÿป๐Ÿ‘ท๐Ÿผ๐Ÿš๐Ÿ“ณ๐Ÿ“ด๐Ÿ‘ท๐Ÿฝ๐Ÿ‘ท๐Ÿพ๐Ÿ‘ท๐Ÿฟ๐Ÿ’๐Ÿ˜ฟ๐Ÿ˜พ๐Ÿคผ๐Ÿงฎ๐Ÿช”๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘งโœ๏ธโ›น๏ธ' }, - { color: 'red', emojis: '๐Ÿ˜๐Ÿฅฐ๐Ÿฅต๐Ÿ˜ก๐Ÿคฌ๐Ÿคก๐Ÿ‘น๐Ÿ‘บโฃ๏ธ๐Ÿ’”โค๏ธโ€๐Ÿ”ฅโคโ€๐Ÿฉน๐Ÿ’ฏ๐Ÿ’‹๐Ÿ’ข๐Ÿ’ฅ๐Ÿ”๐Ÿ™๐Ÿž๐Ÿชฑ๐ŸŒธ๐ŸŒน๐ŸŒบ๐Ÿฅ€๐Ÿ๐Ÿ‚๐Ÿ„๐Ÿ‰๐ŸŽ๐Ÿ“๐Ÿ’๐Ÿ…๐ŸŒถ๏ธ๐Ÿฅฉ๐Ÿ–๐ŸŸ๐Ÿซ•๐Ÿฅซ๐Ÿฟ๐Ÿฃ๐Ÿฆ€๐Ÿฆž๐Ÿฆ๐Ÿฆ‘๐Ÿซ๐Ÿท๐Ÿฅค๐Ÿœ๏ธ๐Ÿงฑโ›ฉ๏ธโ™จ๏ธ๐ŸŽช๐Ÿš’๐Ÿš‚๐Ÿš—๐Ÿš˜๐ŸŽ๏ธ๐Ÿ›‘โ›ฝ๐Ÿ›ข๏ธ๐Ÿ›Ÿ๐Ÿšข๐Ÿš€๐Ÿšโฐ๐ŸŒก๏ธโ˜„๏ธ๐Ÿ”ฅ๐Ÿงจ๐Ÿงง๐ŸŽˆ๐ŸŽ๐ŸŽŸ๏ธ๐Ÿ“๐ŸฅŠ๐Ÿ›ท๐ŸŽฏ๐ŸŽด๐Ÿงถ๐Ÿงฃ๐ŸŽ’๐Ÿ‘ โ›‘๏ธ๐Ÿ“ฟ๐Ÿ’„๐ŸŽธ๐Ÿฅโ˜Ž๏ธ๐Ÿชซ๐Ÿงฎ๐Ÿฎ๐Ÿ“•๐Ÿ“ฎ๐Ÿ–๏ธ๐Ÿ“Œ๐Ÿ“โœ‚๏ธ๐Ÿช“๐Ÿงฐ๐Ÿ›ก๏ธ๐Ÿงฒ๐Ÿงซ๐Ÿฉธ๐Ÿ’Š๐Ÿงฏโ›”๐Ÿšซโ“โ—๐Ÿ“›โญ•โŒ๐Ÿ…ฐ๏ธ๐Ÿ†Ž๐Ÿ…ฑ๏ธ๐Ÿ†‘๐Ÿ…พ๏ธ๐Ÿ†˜๐Ÿ‰๐Ÿˆน๐Ÿˆฒ๐ŸˆดใŠ—๏ธใŠ™๏ธ๐Ÿˆต๐Ÿ”ด๐ŸŸฅ๐Ÿ”บ๐Ÿ”ป๐Ÿšฉ' }, -]; - -// Function to set up the canvas and initialize emojis -function setup() { - createCanvas(windowWidth, windowHeight); - textSize(FONT_SIZE); - textAlign(CENTER, CENTER); -} - -// Function to draw the emoji heatmap -function draw() { - background(220); - - const time = frameCount * 0.01; - - for (let x = 0; x < width; x += FONT_SIZE) { - for (let y = 0; y < height; y += FONT_SIZE) { - const noiseValue = calculateNoiseValue(x, y, time); - const emoji = getEmojiFromNoiseValue(noiseValue); - text(emoji, x, y); - } - } -} - -// Function to calculate Perlin noise value -function calculateNoiseValue(x, y, time) { - return noise((x + xOffset) * NOISE_SCALE, (y + yOffset) * NOISE_SCALE, time); -} - -// Function to get emoji based on noise value -function getEmojiFromNoiseValue(noiseValue) { - let category; - if (noiseValue < 0.0625) { - category = 'deeppurple'; - } else if (noiseValue < 0.125) { - category = 'purple'; - } else if (noiseValue < 0.1875) { - category = 'lightpurple'; - } else if (noiseValue < 0.25) { - category = 'magenta'; - } else if (noiseValue < 0.3125) { - category = 'darkblue'; - } else if (noiseValue < 0.375) { - category = 'lightblue'; - } else if (noiseValue < 0.4375) { - category = 'cyan'; - } else if (noiseValue < 0.5) { - category = 'emeraldgreen'; - } else if (noiseValue < 0.5625) { - category = 'limegreen'; - } else if (noiseValue < 0.625) { - category = 'peargreen'; - } else if (noiseValue < 0.6875) { - category = 'chartreusgreen'; - } else if (noiseValue < 0.75) { - category = 'mustardyellow'; - } else if (noiseValue < 0.8125) { - category = 'paradiseyellow'; - } else if (noiseValue < 0.875) { - category = 'goldenyellow'; - } else if (noiseValue < 0.9375) { - category = 'orange'; - } else { - category = 'red'; - } - - const categoryIndex = EMOJI_CATEGORIES.findIndex(cat => cat.color === category); - const categoryEmojis = EMOJI_CATEGORIES[categoryIndex].emojis; - const index = floor(map(noiseValue, - categoryIndex / EMOJI_CATEGORIES.length, - (categoryIndex + 1) / EMOJI_CATEGORIES.length, - 0, categoryEmojis.length)); - return categoryEmojis[index]; -} - -// Function to handle mouse dragging -function mouseDragged() { - xOffset += (pmouseX - mouseX) * 0.1; - yOffset += (pmouseY - mouseY) * 0.1; -} - -// Function to handle window resizing -function windowResized() { - resizeCanvas(windowWidth, windowHeight); -} \ No newline at end of file