针对常见节日(“春节、圣诞节、万圣节、复活节、排灯节、独立日、感恩节、五月五日节”)生成对应的 WS2812 幻彩灯珠颜色序列

下面给出一个示例的 JavaScript 函数,针对常见节日(“春节、圣诞节、万圣节、复活节、排灯节、独立日、感恩节、五月五日节”)生成对应的 WS2812 幻彩灯珠颜色序列。该函数包含以下特点:

  1. 节日色彩主题:根据不同节日定义若干基础色。
  2. 颜色强度(亮度/饱和度因子):利用传入的 intensity 调整颜色的明亮程度。
  3. 随机性:每个灯珠基于节日的主题色,做一些随机偏移,让整体显示更灵动,而非静态单调。

注意

  • 这里“颜色强度”主要用来控制亮度(可能也可理解为饱和度/鲜艳度)。
  • 可根据实际需求,扩展更多随机策略或者调整色彩范围。
  • 颜色输出格式为 [[R,G,B], [R,G,B], ...],每个 R/G/B 范围在 0~255

/**
 * 生成 WS2812 幻彩灯珠颜色值序列
 * @param {string} holiday - 节日类型,如 "春节", "圣诞节", "万圣节" 等
 * @param {number} intensity - 颜色强度,范围 0~1
 * @param {number} numLeds - 要生成的灯珠数量
 * @returns {number[][]} 返回一个长度为 numLeds 的数组,每个元素是 [R, G, B]
 */
function generateHolidayColors(holiday, intensity, numLeds) {
  // 针对每个节日定义一些基础色 (RGB),根据需求可自由增加或调整
  const holidayPalettes = {
    "春节": [
      [255, 0, 0],     // 大红
      [255, 215, 0]    // 金色 (近似:金黄)
    ],
    "圣诞节": [
      [255, 0, 0],     // 红
      [0, 128, 0],     // 绿
      [255, 255, 255]  // 白
    ],
    "万圣节": [
      [255, 140, 0],   // 橙 (南瓜色)
      [128, 0, 128],   // 紫
      [0, 0, 0],       // 黑 (灯珠上可用较暗紫或暗橙代替)
      [0, 255, 0]      // 也可加一点诡异的绿
    ],
    "复活节": [
      [255, 192, 203], // 浅粉
      [173, 216, 230], // 浅蓝
      [152, 251, 152], // 浅绿 (PaleGreen)
      [221, 160, 221]  // 浅紫 (Plum)
    ],
    "排灯节": [
      [255, 140, 0],   // 橙
      [255, 215, 0],   // 金黄
      [255, 20, 147]   // 亮粉 (象征节日的绚丽)
    ],
    "独立日": [
      [255, 0, 0],     // 红
      [255, 255, 255], // 白
      [0, 0, 255]      // 蓝
    ],
    "感恩节": [
      [255, 165, 0],   // 橙 (秋天的南瓜色)
      [210, 105, 30],  // 棕
      [255, 215, 0]    // 金黄
    ],
    "五月五日节": [
      [0, 128, 0],     // 绿
      [255, 0, 0],     // 红
      [255, 255, 255], // 白
      [255, 255, 0]    // 黄,鲜艳点
    ]
  };

  // 如果没有找到对应节日,则使用默认色(白色或其他)
  let palette = holidayPalettes[holiday];
  if (!palette) {
    palette = [[255, 255, 255]]; // 默认全白
  }

  // 结果数组
  let colors = [];
  
  for (let i = 0; i < numLeds; i++) {
    // 从该节日的色彩主题中随机挑一个基础色
    let base = palette[Math.floor(Math.random() * palette.length)];
    let [rBase, gBase, bBase] = base;

    // 将基础色的亮度根据 intensity 进行缩放
    // intensity=0 => 黑色, intensity=1 => 原色
    // 下面是简单的线性缩放,也可根据需要添加伽马校正
    let r = rBase * intensity;
    let g = gBase * intensity;
    let b = bBase * intensity;

    // 在此基础上引入一些随机浮动,让灯珠颜色更活泼:
    // 幅度可根据 intensity 调整, 避免过度偏离原色
    // 例如随机范围 ±(30 * intensity),可根据需求微调
    let variation = 30 * intensity;

    r += (Math.random() - 0.5) * 2 * variation;
    g += (Math.random() - 0.5) * 2 * variation;
    b += (Math.random() - 0.5) * 2 * variation;

    // 保持在 0-255 范围
    r = Math.min(Math.max(0, r), 255);
    g = Math.min(Math.max(0, g), 255);
    b = Math.min(Math.max(0, b), 255);

    // 存储到结果数组
    colors.push([Math.round(r), Math.round(g), Math.round(b)]);
  }

  return colors;
}


// ========== 示例调用 ==========

// 春节,强度 0.8,100 颗灯
let resultSpringFestival = generateHolidayColors("春节", 0.8, 100);
console.log("春节:", resultSpringFestival);

// 圣诞节,强度 1.0,10 颗灯
let resultChristmas = generateHolidayColors("圣诞节", 1.0, 10);
console.log("圣诞节:", resultChristmas);

// 五月五日节,强度 0.5,10 颗灯
let resultCincoDeMayo = generateHolidayColors("五月五日节", 0.5, 10);
console.log("五月五日节:", resultCincoDeMayo);

在这里插入图片描述

说明

  1. 节日与色彩
    • 以上仅是示例色彩,每个节日通常会有更多可选的象征色,比如春节可再加一些喜庆的粉色或鞭炮金黄,复活节也可加更多五彩缤纷的 pastel(糖果色)等。可自行拓展。
  2. 亮度/强度缩放
    • 在示例中简单用了 rBase * intensity 进行线性缩放。如有需要可做伽马校正或者更复杂的曲线映射。
  3. 随机浮动
    • 添加了 ±30 * intensity 的随机变化,可根据视觉体验来调大或调小,使灯珠在同一节日主题下也呈现丰富变化。
  4. 超界限制
    • 调整颜色值时注意不要超出 [0,255] 范围。
  5. 拓展
    • 可以结合 HSV/HSL 空间做更多花样,比如色调小幅晃动、饱和度随随机数变化等,令色彩更具层次感。

如以上示例,即可在同一节日、相同参数下,每次得到略有不同的灯光效果,让整体灯光不再“静态单调”,而更显动感与多彩。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值