我已经绘制了一个正弦波在处理中把x数量的像素函数。乍一看就像一条连续的线:
正弦波看起来是连续的
但是当我增加波的振幅时,我注意到绘制的点展开了,看起来不再是连续的:
点分布处振幅增大的正弦波
我认为绘制更多的点或点之间的插值可以解决这个问题。我想知道什么是最有效的方法,使函数看起来连续的振幅或频率的任何增量。
如果有任何帮助,下面是正在处理的代码:
// sine variables
float x, y, y2, offset,r = 0;
float ex = 0, ey = 0;
void setup() {
size(800, 800);
frameRate(60);
}
void draw() {
// sine
checkMouse();
amp = amp+ex;
background(0);
y2 = y;
stroke(255);
for (int i = 5; i < 6;i++) {
updateWave(i);
}
}
void updateWave(float i) {
for (int x = 1; x < width; x+=1) {
y = sin(radians(-x*abs(ex)+r))*ey*i;
circle(x, y+height/2,2);
}
r = millis()/8;
}
void checkMouse() {
if (mousePressed){
ex = (mouseX - height/2)*0.01;
ey = pow((mouseY- height/2), 2)/1000;
} else {
if (ey < 1) {
ey = 0;
} else {
ey -= 1;
}
}
}
谢谢!!
2条答案
按热度按时间txu3uszq1#
划一条线(
line()
)在两个连续的点之间,而不是在单个点之间(circle()
). 线条的粗细可以通过strokeWeight()
:c86crjj02#
你可以使用
createShape()
处理提供的函数。to doc有一些很好的例子。我们的想法是从
s = createShape()
在你开始循环之前updateWave()
在draw()
. 然后在updateWave()
而不是创建一个circle()
您将创建一个新的s.vertex()
在形状上。当你退出循环时,你可以调用
s.endShape()
然后你就可以打电话了shape(s)
绘制由这些点创建的形状。