You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在p5.js中实现彩色匀速旋转花朵与花瓣独立填色

p5.js 8瓣彩色旋转花朵实现方案

现有基础代码

当前可绘制带白色圆心的静态8瓣花朵的基础代码如下:

function setup() {
  createCanvas(400, 400);
}

function draw() {
  background(220);
  petals();
  noStroke(); // 花朵中心为白色圆形
  fill(255);
  ellipse(200, 200, 130, 130);

  function petals() {
    push()
      translate(200, 200);
      rotate(radians(90));
      noStroke();
      rotate(radians(45));
      ellipse(100, 0, 250, 60)
      rotate(radians(45));
      ellipse(100, 0, 250, 60)
      rotate(radians(45));
      ellipse(100, 0, 250, 60)
      rotate(radians(45));
      ellipse(100, 0, 250, 60)
      rotate(radians(45));
      ellipse(100, 0, 250, 60)
      rotate(radians(45));
      ellipse(100, 0, 250, 60)
      rotate(radians(45));
      ellipse(100, 0, 250, 60)
      rotate(radians(45));
      ellipse(100, 0, 250, 60)
    pop()
  }
}

依赖的p5.js库引入代码:

<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.js"></script>

问题原因

  • 花瓣同色问题:如果没有在每一个ellipse()花瓣绘制语句前单独设置fill(),所有花瓣会沿用最后一次定义的填充色,导致颜色统一;逐行重复编写绘制语句的写法,也不利于单独给每片花瓣绑定对应颜色。
  • 静态无旋转问题:代码中所有rotate()传入的都是固定常量值,没有随帧更新的动态角度变量,因此画面不会产生旋转动画。

修改方案

  • 彩虹色花瓣实现:提前定义长度为8的彩虹色数组,通过循环批量绘制8片花瓣,每绘制一片前从数组中取对应颜色设置填充值即可。
  • 匀速旋转实现:在全局定义旋转角度变量,draw()函数每执行一帧就给角度变量累加固定值,将该动态变量作为花瓣组的整体旋转角度传入,即可实现匀速旋转效果,调整累加的数值大小可以控制旋转速度。

修改后完整代码

// 全局旋转角度变量
let rotation = 0;
// 8片花瓣对应的8种彩虹色
const petalColors = ['#FF0000', '#FF7F00', '#FFFF00', '#00FF00', '#0000FF', '#4B0082', '#9400D3', '#FF1493'];

function setup() {
  createCanvas(400, 400);
}

function draw() {
  background(220);
  petals();
  // 绘制中心白色圆心
  noStroke();
  fill(255);
  ellipse(200, 200, 130, 130);
  // 每帧累加旋转角度,数值越大旋转速度越快
  rotation += radians(0.8);
}

function petals() {
  push();
  translate(200, 200);
  // 传入动态角度实现整体旋转
  rotate(rotation);
  noStroke();
  // 循环绘制8片花瓣,替换重复代码
  for(let i = 0; i < 8; i++) {
    rotate(radians(45));
    // 每片花瓣单独设置填充色
    fill(petalColors[i]);
    ellipse(100, 0, 250, 60);
  }
  pop();
}

注:如果需要调整旋转方向,把角度累加的+改成-即可;如果需要调整花瓣配色,直接修改petalColors数组内的色值即可。

内容的提问来源于stack exchange,提问作者rose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:39:29