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

如何用while循环绘制大量椭圆并实现灰色由内向外渐亮效果?

用While循环绘制灰度渐变的椭圆群

我来帮你搞定这个需求!先看看你代码里的几个小问题,再一步步实现从中心到外侧灰度逐渐变亮的效果~

你的原代码存在的问题:

  • 变量命名错误:width-ellipse这类带减号的命名是不合法的,应该用下划线(如ellipse_width)或驼峰式(如ellipseWidth),而且你后续使用的w和h没有初始化初始值,程序会报错
  • 循环条件语法错误:while(w < 200))多了一个右括号,导致语法不通过
  • 尺寸更新逻辑混乱:w = w + 20; w++;相当于每次让w增加21,没必要拆分写,而且没有关联灰度值的变化,无法实现渐变
  • 填充色固定:fill(125)是固定灰度,没有随着椭圆层级变化

修正后的实现代码

下面是可以实现你需求的完整代码,我会逐段解释逻辑:

size(200, 200);
background(255);

// 初始化核心变量
float centerX = 100;       // 画布中心X坐标
float centerY = 100;       // 画布中心Y坐标
float ellipseSize = 20;    // 初始椭圆的宽高(最内层椭圆)
float step = 10;           // 每次椭圆增大的步长
float grayValue = 50;      // 初始灰度值(最内层用深灰)

// While循环绘制椭圆群
while (ellipseSize <= 200) {
  noStroke();  // 去掉边框,让渐变过渡更自然(需要边框可以加回stroke(0))
  fill(grayValue);
  ellipse(centerX, centerY, ellipseSize, ellipseSize);
  
  // 更新下一个椭圆的尺寸和灰度值
  ellipseSize += step;
  // 灰度值递增,用min()确保不超过255(白色的灰度值)
  grayValue = min(grayValue + 15, 255);
}

关键逻辑说明:

  • 中心对齐:所有椭圆都以画布中心(100,100)为圆心,保证从中心向外扩散的效果
  • 灰度渐变:最内层椭圆用较低的灰度值(50,深灰),每绘制一个外层椭圆就增加灰度值,直到达到255(纯白),这样就实现了从中心到外侧逐渐变亮的效果
  • 循环终止条件:当椭圆的尺寸超过画布大小(200)时停止循环,避免绘制出画布外的无效图形
  • 平滑过渡:去掉了边框,让不同灰度的椭圆叠加起来过渡更自然,如果你需要清晰的边框,可以把noStroke()改成stroke(0)

内容的提问来源于stack exchange,提问作者Serkan K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:04:14