p5.js 向利萨如曲线添加一条消失的椭圆轨迹
p5.js Add a dissapearing ellipse trail to Lissajous curve line
我有一个简单的代码,可以用一个小椭圆描绘 Liss 曲线。我想知道如何向这个形状添加 fading trail 以便它更清楚地表示曲线。我只知道一点关于添加跟随鼠标的轨迹,但我不知道该怎么做。
感谢任何帮助,这是代码:
var t = 0;
function setup() {
createCanvas(500, 500);
fill(255);
}
function draw() {
background(0);
for (i = 0; i < 1; i++) {
y = 160*sin(3*t+PI/2);
x = 160*sin(1*t);
fill(255);
ellipse(width/2+x, height/2+y, 5, 5);
t += .01;
}
}
尝试将 background(0)
更改为 background(0, 0, 0, 4)
:)
这是一个工作示例:
https://editor.p5js.org/chen-ni/sketches/I-FbLFDXi
编辑:
这是另一个不使用背景技巧的解决方案:
https://editor.p5js.org/chen-ni/sketches/HiT4Ycd5U
基本上,它跟踪每个点的位置并在每一帧中使用更新的 alpha 重新绘制它们以创建“淡出”效果。
var t = 0;
var particleArray = [];
function setup() {
createCanvas(500, 500);
}
function draw() {
background(0);
y = width / 2 + 160 * sin(3 * t + PI / 2);
x = height / 2 + 160 * sin(1 * t);
particleArray.push(new Particle(x, y, t));
for (i=0; i<particleArray.length; i++) {
particleArray[i].show(t);
}
//keep the array short, otherwise it runs very slow
if (particleArray.length > 800) {
particleArray.shift();
}
t += .01;
}
function Particle(x, y, t) {
this.x = x;
this.y = y;
this.t = t;
this.show = function(currentT) {
var _ratio = t / currentT;
_alpha = map(_ratio, 0, 1, 0, 255); //points will fade out as time elaps
fill(255, 255, 255, _alpha);
ellipse(x, y, 5, 5);
}
}
我有一个简单的代码,可以用一个小椭圆描绘 Liss 曲线。我想知道如何向这个形状添加 fading trail 以便它更清楚地表示曲线。我只知道一点关于添加跟随鼠标的轨迹,但我不知道该怎么做。
感谢任何帮助,这是代码:
var t = 0;
function setup() {
createCanvas(500, 500);
fill(255);
}
function draw() {
background(0);
for (i = 0; i < 1; i++) {
y = 160*sin(3*t+PI/2);
x = 160*sin(1*t);
fill(255);
ellipse(width/2+x, height/2+y, 5, 5);
t += .01;
}
}
尝试将 background(0)
更改为 background(0, 0, 0, 4)
:)
这是一个工作示例:
https://editor.p5js.org/chen-ni/sketches/I-FbLFDXi
编辑:
这是另一个不使用背景技巧的解决方案:
https://editor.p5js.org/chen-ni/sketches/HiT4Ycd5U
基本上,它跟踪每个点的位置并在每一帧中使用更新的 alpha 重新绘制它们以创建“淡出”效果。
var t = 0;
var particleArray = [];
function setup() {
createCanvas(500, 500);
}
function draw() {
background(0);
y = width / 2 + 160 * sin(3 * t + PI / 2);
x = height / 2 + 160 * sin(1 * t);
particleArray.push(new Particle(x, y, t));
for (i=0; i<particleArray.length; i++) {
particleArray[i].show(t);
}
//keep the array short, otherwise it runs very slow
if (particleArray.length > 800) {
particleArray.shift();
}
t += .01;
}
function Particle(x, y, t) {
this.x = x;
this.y = y;
this.t = t;
this.show = function(currentT) {
var _ratio = t / currentT;
_alpha = map(_ratio, 0, 1, 0, 255); //points will fade out as time elaps
fill(255, 255, 255, _alpha);
ellipse(x, y, 5, 5);
}
}