颜色分配问题

news/2025/1/21 17:39:09/文章来源:https://www.cnblogs.com/ljwsyt/p/18683930

要求

我现在有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 转换为 RGBconst 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 颜色代码。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/872890.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【红队】C2框架:Covenant

一、项目介绍 Covenant是一个.NET开发的C2(command and control)框架,旨在突出.NET的攻击面,并充当红队成员的协作命令和控制平台,该工具不仅支持Linux,MacOS和Windows,还支持docker容器,最特别的地方是支持动态编译,能够将输入的C#代码上传至C2 Server,获得编译后的文…

3. 使用sql查询csv/json文件内容,还能关联查询?

1. 简介 我们在前面的文章提到了calcite可以支持文件系统的数据源适配, 其实官方已经提供了相应的能力, 其支持csv和json的查询适配, 废话不多说, 直接展示. 2. Maven <!-- calcite文件系统支持 --> <dependency><groupId>org.apache.calcite</groupId>…

一文搞懂 APP 算法备案

今天来给大家好好科普一下超重要的 APP 算法备案,这可是和我们日常使用 APP 以及 APP 运营都息息相关的知识点哦! 什么是算法备案 简单来讲,算法备案就相当于 APP 运营者要把自家 APP 里使用的算法详情,向有关部门进行申报登记。这就如同给算法这个 “幕后大脑” 办一张正式…

IDEA 在远程 Tomcat 上运行项目(转载补充版)

转载:IDEA 在远程 Tomcat 上运行项目(亲身避坑版) 我在操作的时候,遇到个问题,提示Unable to open debugger port (192.168.252.232:54578): java. net. ConnectException "Connection refused: connect" 原因是,开启JVM调试,需要在2.1小节设置环境变量的时候…

VMware Tools 13.0.0 发布 - 客户机操作系统无缝交互必备组件

VMware Tools 13.0.0 发布 - 客户机操作系统无缝交互必备组件VMware Tools 13.0.0 发布 - 客户机操作系统无缝交互必备组件 VMware 虚拟机必备组件 (驱动和交互式服务) VMware Tools 13.0.0 发布 - 虚拟机必备组件 (驱动和交互式服务) VMware 客户机操作系统无缝交互必备组件 请…

【交通行业】2024中国网络安全产业势能榜优能企业「交通行业」典型案例展示

交通行业的智能化发展使得交通系统的效率得到了大幅提升,但随之而来的安全隐患也不容忽视。从自动驾驶到智慧交通,每一项技术的进步都伴随着数据保护和系统安全的挑战。我们将通过交通行业的典型案例,探索在高速发展的同时,如何确保交通系统的安全和稳定。 PS:典型案例展示…

ITIL认证工具商-ManageEngine Servicedesk Plus

ServiceDesk Plus是Zoho Corporation旗下企业IT管理部门ManageEngine提供的统一服务管理解决方案。凭借其无限的可扩展性、情境化的IT和业务集成以及一键式工作流程自动化功能,IT领导者可以使用ServiceDesk Plus有效执行和控制跨不同业务部门和IT功能的复杂工作流程。 Service…

微信公众号-脚本简单实现,自动新建草稿并发布草稿文章,代码开源

介绍 本来想写一个自动化发布微信公众号的小绿书的脚本。但是微信公众号官网没有小绿书的接口。 想着算了吧,写都写了,那就写一个微信普通文章的脚本吧。 写完了 就想着把脚本分享出来,给大家一起交流下。 水平有限,大佬轻喷。思路 1,获取百度热搜列表 2,给热搜图片加上文…

如何在织梦CMS中修改网站标题?

织梦CMS(DedeCMS)是一款流行的开源内容管理系统。以下是修改织梦网站标题的步骤:登录后台:使用管理员账号登录织梦CMS后台管理系统。 进入模板管理:在后台管理系统中找到“模板管理”或“模板文件管理”选项。 编辑模板文件:找到包含网站标题的模板文件(如index.htm),…

修改公司网站数据库名称时需要注意的问题及解决方案

问题描述 当需要对公司网站的数据库名称进行更改时,有哪些潜在风险和挑战?如何确保这一过程顺利进行? 答案 修改公司网站的数据库名称是一项敏感的操作,因为它涉及到整个系统的底层架构,稍有不慎就可能导致数据丢失或服务中断。以下是需要注意的问题及解决方案:评估影响范…

使用FlashFXP修改网站代码

问题描述 如何使用FlashFXP工具安全地修改网站代码,确保网站正常运行? 答案 FlashFXP是一款常用的FTP客户端,广泛用于网站文件的上传和下载。通过FlashFXP,用户可以方便地修改网站代码。以下是详细的步骤和注意事项:安装FlashFXP:首先,下载并安装FlashFXP软件。确保安装…

如何处理虚拟主机上的系统误报和非法信息检测问题?

要处理虚拟主机上的系统误报和非法信息检测问题,您可以采取以下措施:确认误报文件:检查被误报为病毒的文件是否确实为正常文件。如果是正常文件,建议联系程序提供商重新设计页面,避免使用容易被误判的文件名或格式。 如果文件确实是合法的,可以尝试将其路径添加到白名单中…