p5.js圆(circle)的用法实战教程

 更新时间:2025年08月27日 09:04:50   作者:德育处主任Pro  
这篇文章主要介绍了p5.js圆(circle)用法的相关资料,p5.js的circle()函数通过x、y、d三个参数绘制圆形,支持填充颜色、动画等扩展,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

如果你刚接触 p5.js,想知道怎么画一个圆,那 circle() 函数就是最适合的入门工具。它简单到只需要 3 个参数就能画出一个圆,甚至能轻松扩展出彩色、动画等效果。

circle()的基础语法

circle() 是 p5.js 专门用来画圆形的函数 —— 就像现实中用圆规画圆一样,只要确定 “中心点” 和 “大小”,就能立刻画出一个标准的圆。

它可以用来:

  • 画简单的圆形图形(比如太阳、气泡、按钮)
  • 作为复杂图形的基础(比如组合成花朵、表情)
  • 结合动画做出移动、缩放、变色的圆

基础语法

circle() 函数的语法非常简单,只有 3 个必须的参数:

circle(x, y, d)

参数讲解

  • x:圆心的水平位置(可以理解为 “左右位置”,数值越大越靠右)
  • y:圆心的垂直位置(可以理解为 “上下位置”,数值越大越靠下)
  • d:圆的直径(圆的 “大小”,数值越大圆越大;直径 = 半径 ×2,比如直径 20 的圆,半径是 10)

p5.js 的坐标系

和我们平时画纸的坐标有点不一样:

  • 画布左上角是原点(0,0)
  • 向右移动,x 值增大;向下移动,y 值增大
  • 比如 circle(100, 80, 50) 表示:在画布 “右 100 像素、下 80 像素” 的位置,画一个直径 50 的圆

动手试试

最最最简单的一个圆

从最基础的代码开始,画一个圆并显示在画布上。

function setup() {
  // 创建一个400×400像素的画布
  createCanvas(400, 400);
  // 给画布设置灰色背景(数值0-255,0是黑,255是白)
  background(220);
}

function draw() {
  // 在画布中心画一个直径100的圆
  // 画布中心坐标是(200,200),因为400/2=200
  circle(200, 200, 100);
}

灰色画布正中间,会出现一个黑色边框、白色填充的圆。

画多几个圆

掌握了基础画法,可以尝试画多个不同位置、大小、颜色的圆,组合出简单图形。

彩色气泡(不同位置、大小、颜色)

function setup() {
  createCanvas(400, 400);
  background(135, 206, 235); // 浅蓝色背景(像天空)
}

function draw() {
  // 取消重复绘制(只画一次)
  noLoop();
  
  // 画第一个圆:红色,位置(100,150),直径80
  fill(255, 99, 71); // 填充红色(RGB颜色:红255,绿99,蓝71)
  noStroke(); // 去掉边框
  circle(100, 150, 80);
  
  // 画第二个圆:黄色,位置(200,200),直径120
  fill(255, 215, 0); // 填充金黄色
  circle(200, 200, 120);
  
  // 画第三个圆:紫色,位置(300,100),直径60
  fill(138, 43, 226); // 填充紫色
  circle(300, 100, 60);
}

关键函数说明

  • fill(r, g, b):设置圆的填充颜色(RGB 值,0-255)
  • noStroke():去掉圆的边框(默认有黑色边框)
  • noLoop():让 draw() 只执行一次(避免重复绘制覆盖)

同心圆(同一中心,不同大小)

function setup() {
  createCanvas(400, 400);
  background(255); // 白色背景
}

function draw() {
  noLoop();
  let centerX = 200; // 圆心x
  let centerY = 200; // 圆心y
  
  // 最外层圆:直径200,灰色边框
  stroke(200); // 边框颜色
  strokeWeight(3); // 边框粗细
  noFill(); // 不填充
  circle(centerX, centerY, 200);
  
  // 中间圆:直径150,灰色边框
  circle(centerX, centerY, 150);
  
  // 内层圆:直径100,灰色边框
  circle(centerX, centerY, 100);
  
  // 中心小圆:直径20,黑色填充
  fill(0);
  noStroke();
  circle(centerX, centerY, 20);
}

白色背景上会出现 3 个同心的灰色圆环,中心有一个黑色小圆,像靶子一样。

简单动画

圆本身是静态的,但结合 p5.js 的 draw() 函数(每秒自动执行 60 次),可以让圆 “动” 起来。我们还能模仿 “动画方向” 的效果(比如来回移动、反复缩放)。

来回移动的圆

这个例子里,圆会在画布中左右移动,碰到左右边缘就反向,类似 “交替往返” 的动画效果。

let x = 50; // 圆的初始x坐标
let speed = 3; // 移动速度

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

function draw() {
  background(220); // 每次刷新画布(清除上一帧)
  
  // 画圆:y固定在100,直径60
  fill(70, 130, 180); // 钢蓝色
  noStroke();
  circle(x, 100, 60);
  
  // 更新x坐标(移动)
  x = x + speed;
  
  // 碰到左右边缘时反向(模拟 alternate 方向)
  // 左边缘:x小于直径的一半(圆左边不超出画布)
  // 右边缘:x大于画布宽度 - 直径的一半(圆右边不超出画布)
  if (x < 30 || x > 400 - 30) {
    speed = -speed; // 反转速度方向
  }
}

动画原理

  1. x 变量记录圆的水平位置,speed 控制移动速度
  2. 每次 draw() 执行时,x 增加 speed(圆向右移动)
  3. 当圆碰到左边缘(x < 30)或右边缘(x > 370),speed 变负(反向移动)
  4. background(220) 每次刷新画布,避免留下轨迹

反复缩放的圆(模拟交替大小变化)

圆的大小(直径)会从小到大、再从大到小反复变化。

let d = 50; // 初始直径
let scaleSpeed = 2; // 缩放速度

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

function draw() {
  background(255);
  
  // 画圆:固定在中心
  fill(255, 165, 0); // 橙色
  noStroke();
  circle(200, 200, d);
  
  // 更新直径(缩放)
  d = d + scaleSpeed;
  
  // 碰到大小边界时反向缩放
  if (d > 300 || d < 20) {
    scaleSpeed = -scaleSpeed; // 反转缩放方向
  }
}

橙色的圆会在中心反复变大、变小,最小直径 20,最大 300。

注意事项

  1. 直径和半径的区别circle() 的第三个参数是 “直径”(穿过圆心的直线长度),不是半径。如果想按半径画圆,记得把半径 ×2(比如半径 30,直径就是 60)。
  2. 坐标别搞反:p5.js 中 y 轴向下为正(和数学坐标系相反),所以 y=50y=100 更靠上。
  3. 动画要清画布:做动画时,必须在 draw() 里加 background(),否则圆会留下 “拖影”(上一帧的圆不会被清除)。
  4. 颜色值范围fill()stroke() 的 RGB 值都是 0-255(0 是最暗,255 是最亮),超出范围会无效。

circle() 是 p5.js 中最直观的绘图函数之一,核心就是通过 (x, y) 确定位置,d 确定大小。从静态的单个圆,到组合图形,再到简单动画,只要掌握 “参数控制” 和 “循环更新”,就能玩出很多花样。

试着修改示例中的参数(比如颜色、速度、大小),看看会有什么变化 —— 编程的乐趣就在于不断尝试!

总结

到此这篇关于p5.js圆(circle)用法的文章就介绍到这了,更多相关p5.js圆circle用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 封装一个公用Echarts图表组件的3种模板代码示例

    封装一个公用Echarts图表组件的3种模板代码示例

    这篇文章主要给大家介绍了关于封装一个公用Echarts图表组件的3种模板,定义图表公共样式是为了统一同一网站各页面图表的基础样式,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • 基于javascript html5实现多文件上传

    基于javascript html5实现多文件上传

    这篇文章主要为大家详细介绍了基于javascript html5实现多文件上传的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • 一文快速弄懂webpack动态import原理

    一文快速弄懂webpack动态import原理

    无论你开发使用的是CommonJS规范还是ES6模块规范,打包后的文件都统一使用webpack自定义的模块规范来管理、加载模块,下面这篇文章主要给大家介绍了关于webpack动态import原理的相关资料,需要的朋友可以参考下
    2022-04-04
  • JS面向对象编程基础篇(三) 继承操作实例详解

    JS面向对象编程基础篇(三) 继承操作实例详解

    这篇文章主要介绍了JS面向对象编程继承操作,结合实例形式详细分析了JS面向对象继承的具体概念、原理、实现方法及操作注意事项,需要的朋友可以参考下
    2020-03-03
  • JS操作对象数组实现增删改查实例代码

    JS操作对象数组实现增删改查实例代码

    JS提供了很多方便操作数组的方法,这篇文章主要给大家介绍了关于JS操作对象数组实现增删改查的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-07-07
  • ios中视频的最后一桢问题解决

    ios中视频的最后一桢问题解决

    这篇文章主要给大家介绍了关于ios中视频的最后一桢问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • 微信小程序多文件上传 Tdesign及导入失败问题

    微信小程序多文件上传 Tdesign及导入失败问题

    小程序文件上传还是有点麻烦的,其实主要还是小程序对的接口有诸多的不便,比如说,文件不能批量提交,只能一个个的提交,小程序的上传需要专门的接口,这篇文章主要介绍了微信小程序多文件上传 Tdesign及导入失败问题,需要的朋友可以参考下
    2023-11-11
  • JavaScript Canvas绘制动态线框效果

    JavaScript Canvas绘制动态线框效果

    这篇文章主要为大家详细介绍了JavaScript Canvas绘制动态线框效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 基于JavaScript实现实时在线协作编辑器

    基于JavaScript实现实时在线协作编辑器

    随着Web技术的发展,实现在线协作编辑文档已经成为一种常见的需求,本文主要为大家详细介绍了如何使用JavaScript实现实时在线协作编辑器,需要的可以参考下
    2024-01-01
  • 纯JS实现弹性导航条效果

    纯JS实现弹性导航条效果

    本文主要介绍了纯JS实现弹性导航条效果的实例,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03

最新评论