用p5.js创意编程

2024-03-24 06:10
文章标签 js 编程 创意 p5

本文主要是介绍用p5.js创意编程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用p5.js创意编程

  • 什么是p5.js
  • 使用p5.js
  • 用p5.js进行创意编程
    • 分析图片
    • 拓展

什么是p5.js

p5.js是一个为艺术家、设计师而开发的Javascript库,可以看作是Processing的Web版本。它与Processing有着共同的目标:让艺术家、设计师、教育工作者和初学者等都能够进行编码,并且是为现代web重新打造。它有着完整的一套作画功能,但并不意味着你能做的只是在canvas上画画。事实上,你可以把整个浏览器都当成你的“画布”,利用插件库你可以很方便地与其他html5元素(如文本,输入框,视频,摄像头和音频)进行交互。

使用p5.js

p5.js拥有在线的代码编辑器,网址如下:
http://alpha.editor.p5js.org/
左边输入代码,点击运行按钮,就可以在右边看到代码运行效果。
也可以使用任何你喜欢的源码编辑器(比如Notepad或者Notes)。

用p5.js进行创意编程

分析图片

首先,我们先确定一张希望临摹的动态艺术图
在这里插入图片描述
看见这张图,我们的第一感觉是在一个黑色底的画布上整齐的分布着66个灰色的圆形,而在四个彼此相邻的圆形中间,有一个黑色的正方形在不断的分散、重组。然而,感觉心理学告诉我们:有时候最不能相信的,就是自己的眼睛!经过仔细观察,分析图片的构成,不难发现,图片中并没有所谓的正方形,而是由一个个四分之三圆形通过旋转构成,彼此相邻的四个圆所缺失的四分之一通过旋转汇聚在一起时我们会错误的认为出现了一个正方形。所以,问题渐渐变得简单明了。整张图片有一个正方形的黑色背景和66个四分之三灰色的圆,并且圆形在不停的旋转。

好了,既然已经大致的了解了图片的构成,我们就可以开始初步的编程。首先我们需要创建一块正方形的画布,背景为黑色。并在上面创建一个四分之三的圆。

查阅p5.js官网上的参考文献链接,我们发现可以通过画圆弧的函数arc() 来绘制四分之三的圆。在这里插入图片描述arc可以绘制圆形的一部分。
第一个和第二个参数设置位置,而第三个和第四个参数设置宽度和高度。第五个参数设置开始弧的角度,第六个参数设置要停止的角度。角度以弧度而不是度数设置。弧度是基于pi值(3.14159)的角度测量值。值PI,QUARTER_PI,HALF_PI和TWO_PI可用于替换180°,45°,90°和360°的弧度值。

function setup()  {createCanvas(550, 550); }function draw() {  background(0); fill(210);arc(50, 50, 80, 80, 0, PI+HALF_PI, PIE); 
}

运行结果:
在这里插入图片描述

如果想使用度数, 而不是弧度,可以用radians()替代。 在这里插入图片描述说明:如果函数调用只提供x,y,w,h,start和stop参数,弧形将会被画成开放的饼形段。如果提供mode参数,弧形可是开放式半圆形(OPEN),封闭式半圆形(CHORD)或封闭式饼形段(PIE)。原点可使用ellipseMode()函数设置。所以我们这里设置成封闭式饼形段。

那么,我可以进行下一步了,如何使这个四分之三圆旋转起来呢?
方法应该有很多,但这里我想的是依旧利用画弧函数arc(),既然函数的第五个参数设置开始弧的角度,第六个参数设置要停止的角度。那么如果我将起始角度与终止角度设置成变量,而起始和终止位置的角度不变,是不是就会产生旋转的效果。

  let x = 0function setup() {createCanvas(550, 550); 
}function draw() {  background(0); x += 0.01fill(210);arc(50, 50, 80, 80, radians(0)+x, radians(270)+x, PIE);	}

运行结果
在这里插入图片描述观察原图我们发现相邻两个圆的旋转方向是相反的,如何让它逆时针旋转呢,很简单,只需让小初末位置减去变量,这样我们就能做出一行圆形了。

let x = 0function setup()  {createCanvas(550, 550); }function draw() {  background(0);  x += 0.01fill(210);arc(50, 50, 80, 80, radians(0)+x, radians(270)+x, PIE);	arc(140, 50, 80, 80, radians(0)-x, radians(270)-x, PIE);	arc(230, 50, 80, 80, radians(0)+x, radians(270)+x, PIE);	arc(320, 50, 80, 80, radians(0)-x, radians(270)-x, PIE);	arc(410, 50, 80, 80, radians(0)+x, radians(270)+x, PIE);arc(500, 50, 80, 80, radians(0)-x, radians(270)-x, PIE);	 }

运行结果
在这里插入图片描述然而这样旋转圆形并不会形成正方形,是由于他们旋转的初始位置都相同。想要形成圆形,就要有一定的相位差。相位差是多少呢?
在这里插入图片描述
我随便截了一张动图的一瞬间,发现第一个圆缺失的四分之一圆运动到左下时,第二个圆刚好运动到右下。所以,只需把这一刻的位置作为他们的起始位置,并让他们以相同速度旋转,就能保证拼出一个正方形。同理做出之后的几行。

let x = 0function setup()  {createCanvas(550, 550); }function draw() {  background(0);  x += 0.05;fill(210);//第一行arc(50, 50, 80, 80, radians(-180)-x, radians(90)-x, PIE);	arc(140, 50, 80, 80, radians(90

这篇关于用p5.js创意编程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/840676

相关文章

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow