随机/线性颜色生成器(RandomColorGenerator)

最近在实现https://javascript30.com/的课程,其中有一门课程要求利用Canvas实现一个效果,我发现这个效果其中的颜色是线性生成的。结合我之前已经写过一个随机颜色生成器,就想将这个随机颜色生成器写出来,作为一个工具使用,虽然实际应用场景不大,就当练练手了。

本示例中使用了大量的Generator,在写的过程发现ES6所提供的Generator在这个场景中非常适用。可以参考学习。

本工具已经上传至NPM,详细介绍了使用方法与注意事项,请移步至:random-color-generator2
1.2.0 版本现已支持HSL算法,线性输出更平稳。

随机生成一个颜色

在这里插入图片描述
在浏览器中这么使用:

    // 生成随机色const pointer = rcg2.generateColor(false);const color = pointer.next().value;

我的示例中使用了300个颜色块,所以颜色呈现上图效果。

返回线性递增颜色

在这里插入图片描述
在浏览器中这么使用:

    // 生成线性色, 步长为5const pointer = rcg2.generateColor(true, 5);const color = pointer.next().value;

我的示例中使用了300个颜色块,所以颜色呈现上图效果。

And (Use HSL algorithm. 😃 Be better! 😃)

HSL算法为360个单位一周期。

HSL采用单次递增1个单位的效果:
在这里插入图片描述
HSL采用单次递增2个单位的效果:
在这里插入图片描述
文本示例:

IndexColor
0‘#ff0000’
1‘#ff1100’
2‘#ff2200’
3‘#ff3300’
4‘#ff4400’

HSL算法说明图:
在这里插入图片描述

如有疑问,可以参见项目中的index.html示例文件。

对generateColor方法及颜色模板的说明

generateColor方法有两个参数.

  • 参数1,类型为boolean值,表示是否开启线性输出。
  • 参数2,类型为整型,表示线性输出情况下颜色的增量区间。例如这个值传入3,在第一个值为#00FF00的情况下,第二个值就为03FF00,以此类推。

颜色模板的排列组合为: XXFF00 XX00FF FFXX00 FF00XX 00XXFF 00FFXX,目前从这6个中循环取模板,后期将支持自定义模板。

分治算法求排列组合

在实现线性递增的过程中,需要了解情况线性颜色的变化方式,在观察了ADOBE对于颜色的变化方式之后,知道需要有一个模板的排列组合。虽然这里需要的只有6种,不用多长时间就可以穷举出来,但是我还是想通过分治的方法将所有的可能列出来。

实现代码如下:

// 分治算法计算所有的颜色模板值
function generateColorTemplate(array) {// 出口if (array.length === 1)return array;const resultArray = [];for (let index = 0; index < array.length; index++) {const firstEle = array[index];const shadow = array.slice();shadow.splice(array.indexOf(firstEle), 1);const temp = generateColorTemplate(shadow);// 组合for (let indexJ = 0; indexJ < temp.length; indexJ++) {const secondEle = temp[indexJ];resultArray.push(`${firstEle}${secondEle}`);}}return resultArray;
}

测试方式如下:

// test.js
const { generateColorTemplate } = require('./src/index.js');const result = generateColorTemplate(['A', 'B', 'C', 'D', 'E']);console.info(result.join(' '), result.length);

对于5个元素的排列组合为: 5的阶层, 也就是 5 x 4 x 3 x 2 x 1 = 120.
最终的结果经过多轮测试是正确的:

ABCDE ABCED ABDCE ABDEC ABECD ABEDC ACBDE ACBED ACDBE ACDEB ACEBD ACEDB ADB
CE ADBEC ADCBE ADCEB ADEBC ADECB AEBCD AEBDC AECBD AECDB AEDBC AEDCB BACDE 
BACED BADCE BADEC BAECD BAEDC BCADE BCAED BCDAE BCDEA BCEAD BCEDA BDACE BDA
EC BDCAE BDCEA BDEAC BDECA BEACD BEADC BECAD BECDA BEDAC BEDCA CABDE CABED 
CADBE CADEB CAEBD CAEDB CBADE CBAED CBDAE CBDEA CBEAD CBEDA CDABE CDAEB CDB
AE CDBEA CDEAB CDEBA CEABD CEADB CEBAD CEBDA CEDAB CEDBA DABCE DABEC DACBE 
DACEB DAEBC DAECB DBACE DBAEC DBCAE DBCEA DBEAC DBECA DCABE DCAEB DCBAE DCB
EA DCEAB DCEBA DEABC DEACB DEBAC DEBCA DECAB DECBA EABCD EABDC EACBD EACDB 
EADBC EADCB EBACD EBADC EBCAD EBCDA EBDAC EBDCA ECABD ECADB ECBAD ECBDA ECD
AB ECDBA EDABC EDACB EDBAC EDBCA EDCAB EDCBA 120

对于这种场景使用分治算法求排列组合非常合适。


代码已经上传Github,地址为:Random Color Generator
这个工具已上传NPM,地址为:random-color-generator2

TODOLIST:

  • 支持颜色模板可配置. 例如支持XXFFFF/XX0000/FFXXFF…
  • 支持步长可配置. 支持单次递增变化值: 1 ~ 255
  • 支持颜色随机范围可配置. 例如支持100 ~ 150的颜色范围区间
  • 支持递减

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

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

相关文章

美团点评运营数据产品化应用与实践

背景 美团点评作为全球最大的生活服务平台&#xff0c;承接超过千万的POI&#xff0c;服务于数量庞大的活跃用户。在海量数据的前提下&#xff0c;定位运营业务、准确找到需要数据的位置&#xff0c;并快速提供正确、一致、易读的数据就变得异常困难&#xff0c;这些困难主要体…

NAACL’21 | 来看如何让模型学会因为所以但是如果

文 | Eleanor 编 | 戏有一些标准考试那是真的难&#xff0c;难到能分分钟教你做人。对于留学党来说&#xff0c;申请法学博士需要 LSAT 考试成绩、申请商学院需要 GMAT 考试成绩。这些标准考试到底有多难&#xff0c;大概考过的都懂8&#xff08;嘤嘤嘤_(:з」∠)_&#xff09;…

领域应用 | 知识计算,华为云赋能企业知识化转型

本文转载自公众号&#xff1a;华为云AI。从计算智能&#xff0c;到感知智能&#xff0c;再到认知智能&#xff0c;是业界普遍认同的人工智能技术发展路径。随着技术的演进&#xff0c;人工智能已经在"听、说、看"等感知智能领域达到或超越了人类水准&#xff0c;但是…

我在小程序工程化方面的一些实践

我在小程序工程化方面的一些实践 早期做小程序时&#xff0c;还是原始时代&#xff0c;项目结构混乱&#xff0c;各种冗余代码&#xff0c;每次迭代时由于高昂的维护成本&#xff0c;极为头疼。遂在一次次的更迭中完成了基础组件的初版&#xff0c;极为酸爽。从此之后在当时的…

LeetCode 430. 扁平化多级双向链表(DFS)

1. 题目 您将获得一个双向链表&#xff0c;除了下一个和前一个指针之外&#xff0c;它还有一个子指针&#xff0c;可能指向单独的双向链表。这些子列表可能有一个或多个自己的子项&#xff0c;依此类推&#xff0c;生成多级数据结构&#xff0c;如下面的示例所示。 扁平化列表…

详解:多模态知识图谱种类及其应用

详解&#xff1a;多模态知识图谱种类及其应用 本文系统的讲述了一些关于多模态知识图谱的相关知识&#xff0c;作者介绍了一些重要的开源多模态知识图谱&#xff0c;基于百科多模态知识图谱Richpedia以及相关使用网站和多模态知识图谱的应用。>>加入极市CV技术交流群&am…

Android Hook技术防范漫谈

背景 当下&#xff0c;数据就像水、电、空气一样无处不在&#xff0c;说它是“21世纪的生产资料”一点都不夸张&#xff0c;由此带来的是&#xff0c;各行业对于数据的争夺热火朝天。随着互联网和数据的思维深入人心&#xff0c;一些灰色产业悄然兴起&#xff0c;数据贩子、爬虫…

论文浅尝 - ICML2020 | 跨域对齐的图最优运输算法

陈卓&#xff0c;浙江大学在读博士&#xff0c;主要研究方向为图神经网络和知识图谱表示学习。论文链接&#xff1a;https://arxiv.org/pdf/2006.14744代码&#xff1a;https://github.com/LiqunChen0606/Graph-Optimal-Transport发表会议&#xff1a;ICML 2020动机该论文的出发…

张俊林:对比学习研究进展精要

文 | 张俊林知乎对比学习(Contrastive Learning)最近一年比较火&#xff0c;各路大神比如Hinton、Yann LeCun、Kaiming He及一流研究机构比如Facebook、Google、DeepMind&#xff0c;都投入其中并快速提出各种改进模型&#xff1a;Moco系列、SimCLR系列、BYOL、SwAV…..&#x…

前端开发者的福音!通过拖拽就可生成Vue代码的平台来了!

Vue组件代码生成平台 Vue组件代码生成平台是一款面向Vue开发者的拖拽式组件代码生成工具。通过它可以快速搭建Vue组件的代码骨架结构。开发者可在此基础上进行二次开发。 目前该平台非常适合快速搭建一个常见的数据查询组件&#xff0c;仅需要拖三个组件进来即可完成&#xf…

LeetCode 523. 连续的子数组和(求余 哈希)

1. 题目 给定一个包含非负数的数组和一个目标整数 k&#xff0c;编写一个函数来判断该数组是否含有连续的子数组&#xff0c;其大小至少为 2&#xff0c;总和为 k 的倍数&#xff0c;即总和为 n*k&#xff0c;其中 n 也是一个整数。 示例 1: 输入: [23,2,4,6,7], k 6 输出: …

知识图谱简介

01 什么是知识图谱 我们可以从不同的视角去审视知识图谱的概念。 在Web视角下&#xff0c;知识图谱如同简单文本之间的超链接一样&#xff0c;通过建立数据之间的语义链接&#xff0c;支持语义搜索。 在自然语言处理视角下&#xff0c;知识图谱就是从文本中抽取语义和结构化的…

流量运营数据产品最佳实践——美团旅行流量罗盘

背景 互联网进入“下半场”后&#xff0c;美团点评作为全球最大的生活服务平台&#xff0c;拥有海量的活跃用户&#xff0c;这对技术来说&#xff0c;是一个巨大的宝藏。此时&#xff0c;我们需要一个利器&#xff0c;来最大程度发挥这份流量巨矿的价值&#xff0c;为酒旅的业务…

开源开放 | OMAHA 联合 OpenKG 发布新冠诊疗图谱数据

本文转载在公众号&#xff1a;OMAHA联盟。今年新型冠状病毒肺炎爆发期间&#xff0c;大数据、云计算、人工智能等新一代信息技术支撑着我国建立和健全疫情防控机制。知识图谱作为机器认知智能实现的基础之一&#xff0c;是人工智能的重要组成部分&#xff0c;在“抗疫”行动中赋…

LeetCode 498. 对角线遍历

1. 题目 给定一个含有 M x N 个元素的矩阵&#xff08;M 行&#xff0c;N 列&#xff09;&#xff0c;请以对角线遍历的顺序返回这个矩阵中的所有元素&#xff0c;对角线遍历如下图所示。 输入: [[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ] ]输出: [1,2,4,7,5,3,6,8,9]2. 解题 横…

图灵奖得主Jeff Ullman:机器学习不是数据科学的全部!统计学也不是!

文 | Jeff Ullman源 | 智源社区3月31日&#xff0c;2020年图灵奖重磅出炉&#xff0c;颁给了哥伦比亚大学计算机科学名誉教授 Alfred Vaino Aho 和斯坦福大学计算机科学名誉教授 Jeffrey David Ullman。Jeff Ullman 是数据科学领域的巨擘&#xff0c;他的研究兴趣包括数据库理论…

深度学习及AR在移动端打车场景下的应用

本文内容根据作者在美团Hackathon 4.0中自研的项目实践总结而成。作为美团技术团队的传统节目&#xff0c;每年两次的Hackathon已经举办多年&#xff0c;产出很多富于创意的产品和专利&#xff0c;成为工程师文化的重要组成部分。本文就是2017年冬季Hackathon 4.0一个获奖项目的…

开源开放 | 熵简科技 AI Lab 开源金融领域中文预训练语言模型 FinBERT

1 背景及下载地址为了促进自然语言处理技术在金融科技领域的应用和发展&#xff0c;熵简科技 AI Lab 近期开源了基于 BERT 架构的金融领域预训练语言模型 FinBERT 1.0。相对于Google发布的原生中文BERT、哈工大讯飞实验室开源的BERT-wwm 以及 RoBERTa-wwm-ext 等模型&#xff0…

前端如何做极致的首屏渲染速度优化

这里说的极致是技术上可以达到最优的性能。 这里不讨论常见的优化手段&#xff0c;比如&#xff1a;Script标签放到底部、DNS预解析、HTTP2.0、CDN、资源压缩、懒加载等。 这里讨论的是如何使First Contentful Paint的时间降到最低&#xff0c;这个指标决定了白屏的时间有多长…