首页 > 其他分享 >颜色分配问题

颜色分配问题

时间:2025-01-21 17:42:35浏览次数:1  
标签:const RGB 问题 colors num 颜色 分配 Math

要求

我现在有N组数据,我现在想给他们每组分配一个6位的颜色代码,要求尽量分散。用什么方法分配比较合适?

方案

方法一:基于 HSL(色相、饱和度、亮度)生成颜色

HSL 是一种颜色模型,其中色相(Hue)是一个角度值(0° 到 360°),可以很好地控制颜色的分散性。通过将色相均匀分布,可以生成一组分散的颜色。

方法二:使用随机颜色生成器

如果不需要严格的颜色分布,可以使用随机生成器来生成颜色。为了尽量分散,可以对随机生成的颜色进行一些优化。

方法三:使用彩虹色(Rainbow Colors)

彩虹色是一种常见的颜色分布方式,可以通过数学公式生成一组分散的颜色。

代码

方法一:基于 HSL(色相、饱和度、亮度)生成颜色

function generateColors(num) {
    const colors = [];
    for (let i = 0; i < num; i++) {
        // 色相均匀分布
        const hue = Math.round(i * 360 / num);
        // 饱和度和亮度固定为 100% 和 50%
        const saturation = 100;
        const lightness = 50;

        // 将 HSL 转换为 RGB
        const rgb = hslToRgb(hue, saturation, lightness);
        const hex = rgbToHex(rgb.r, rgb.g, rgb.b);
        colors.push(hex);
    }
    return colors;
}

function hslToRgb(h, s, l) {
    s /= 100;
    l /= 100;
    const k = (n) => (n + h / 30) % 12;
    const a = s * Math.min(l, 1 - l);
    const f = (n) => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));
    return {
        r: Math.round(f(0) * 255),
        g: Math.round(f(8) * 255),
        b: Math.round(f(4) * 255)
    };
}

function rgbToHex(r, g, b) {
    return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`;
}

// 示例:生成 200 个颜色
const colors = generateColors(200);
console.log(colors);

HSL 转 RGB:通过 hslToRgb 函数将 HSL 转换为 RGB。
RGB 转 HEX:通过 rgbToHex 函数将 RGB 转换为 6 位的 HEX 颜色代码。
色相均匀分布:通过 i * 360 / num 确保色相均匀分布。

方法二:使用随机颜色生成器

如果不需要严格的颜色分布,可以使用随机生成器来生成颜色。为了尽量分散,可以对随机生成的颜色进行一些优化。

function generateRandomColors(num) {
    const colors = new Set();
    while (colors.size < num) {
        const hex = `#${Math.floor(Math.random() * 0xFFFFFF).toString(16).padStart(6, '0')}`;
        colors.add(hex);
    }
    return Array.from(colors);
}

// 示例:生成 200 个颜色
const randomColors = generateRandomColors(200);
console.log(randomColors);

方法三:使用彩虹色(Rainbow Colors)

function generateRainbowColors(num) {
    const colors = [];
    for (let i = 0; i < num; i++) {
        const angle = (i / num) * Math.PI * 2; // 0 到 2π
        const r = Math.sin(angle) * 127 + 128;
        const g = Math.sin(angle + Math.PI * 2 / 3) * 127 + 128;
        const b = Math.sin(angle + Math.PI * 4 / 3) * 127 + 128;

        const hex = rgbToHex(r, g, b);
        colors.push(hex);
    }
    return colors;
}

function rgbToHex(r, g, b) {
    return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`;
}

// 示例:生成 200 个颜色
const rainbowColors = generateRainbowColors(200);
console.log(rainbowColors);

彩虹色公式:通过正弦函数生成彩虹色的 RGB 值。
RGB 转 HEX:将 RGB 值转换为 6 位的 HEX 颜色代码。

部分代码来源于互联网,侵权联删

标签:const,RGB,问题,colors,num,颜色,分配,Math
From: https://www.cnblogs.com/ljwsyt/p/18683930

相关文章

  • 问题8:yum报错:Loaded plugins: fastestmirror Loading mirror speeds from cached hos
    1.问题详情2.解决流程entOS-Base.repo的配置内容如下1[base]2name=CentOS-$releasever-Base3baseurl=http://vault.centos.org/7.9.2009/os/$basearch/4enabled=15gpgcheck=16gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-778[updates]9n......
  • 语音播报,套件多少异常的问题。(含源代码)
    在工作中遇到一家工厂老板的需求:因为产品是有多个配件组成,在生产的时候,经常会多生产,少生产,在组装时,也会出现配件多少的问题,现就此问题设计一款程序。多出,少的,异常的,正常好,会开语音播报。现将全部代码给出以备。 importinspectimportosimportthreadingimporttimeimpor......
  • 如何提升团队协作?4个工具助力物流库存管理任务分配
    在物流管理的庞大体系中,库存管理占据着举足轻重的地位。它不仅直接影响着企业的运营成本和客户服务水平,还与整个供应链的稳定性和效率紧密相连。从库存的规划、采购、存储到配送,每一个环节都需要精细把控,以实现资源的优化配置和效益的最大化。接下来,我们将深入探讨物流库存管理中......
  • 如何给C盘分配更多磁盘空间(其他盘同理)
    直接上磁盘分区软件:1、百度搜索:傲梅分区助手 2、下载后安装;3、打开分区助手:注意:首次打开时需要使用码,正常微信扫码关注即可,页面会出现免费使用码3.1、成功后,打开分区软件 如图可见:系统内存在的磁盘,即内存大小4、选中磁盘,右侧会出现功能选项,就能正常进行拆分,调整了5......
  • [Qt]系统相关-多线程、线程安全问题以及线程的同步机制
    目录一、Qt多线程编程1.介绍2.多线程的操作线程的创建QThread的常用API使用案例3.Qt线程的使用场景二、线程安全问题1.互斥锁介绍使用案例2.读写锁三、线程的同步1.条件变量2.信号量一、Qt多线程编程1.介绍    Qt中的多线程的底层原理和注意事项等......
  • Redis的三大常见问题
    Redis的三大常见问题如果是一名能够熟练的将Redis运用到项目中的程序员,那么一定听说过Redis在使用中存在的问题,那么我们今天就来聊聊Redis的三大问题为什么会有三大问题?首先,对于很多刚接触Redis的同学,很多时候分不清Redis的作用,不太理解为什么要在SQL之外单独在搞一个Red......
  • 【读书与思考】从经济学和自由的角度看待若干爱情问题-纯爱战神、捞女、分手等
    【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】引言快过年了,很多人可能会碰到相亲这个问题,加上最近看的一些书、短视频和新闻引发了我对于这方面的一些思考。纯爱战神与捞女之前刷到过纯爱战神或者捞女这种新闻,我想从下面几个角度谈......
  • 图论-岛屿数量问题
    代码随想录笔记-图论岛屿问题内容:题目描述:LeetCode 200.岛屿数量-力扣(LeetCode)(图源自代码随想录官网)本题是经典的图论遍历问题,只要能完成遍历即可,核心在于只要发现一块地,那么标记一下已经走过即可,以上图例输出为 3  -DFS深度优先搜索方法:每次......
  • 2025最新TikTok企业认证申请指南:要求及常见问题
    现如今,TikTok企业认证已成为众多跨境商家在TikTok营销的重要一环。通过获得TikTok的企业认证标识,不仅能增强品牌的官方性和权威性,还能享受更多企业专属权益。那么,如何申请并获得TikTok的企业认证标识呢?以下是2025最新的申请指南,助力你成功认证~一、TikTok企业认证的重要性......
  • 浮点数精度丢失问题
    目录一、浮点数精度丢失的概念二、以0.1为例的二进制转换过程三、存储精度限制导致的问题四、设置精度避免无限循环与精度丢失的关系五、解决和缓解精度丢失的方法          六、总结一、浮点数精度丢失的概念        当某些十进制小数在二进制中......