Tracé una onda sinusoidal en Procesamiento al poner x cantidad de píxeles en la función. Parece una línea continua a primera vista:
La onda sinusoidal parece continua
Pero cuando aumento la amplitud de la onda, noto que los puntos trazados se dispersan y ya no parece continuo:
Onda sinusoidal con mayor amplitud donde los puntos se extienden
Pensé que trazar más puntos o la interpolación entre los puntos podría resolver el problema. Me preguntaba cuál sería la forma más eficiente de hacer que la función parezca continua para cualquier incremento de amplitud o frecuencia.
Si ayuda de alguna manera, aquí está el código en Procesamiento:
// 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; } } }¡¡Gracias!!
Dibuja una línea ( line() ) entre 2 puntos consecutivos en lugar de puntos individuales ( circle() ). El grosor de una línea se puede establecer con strokeWeight() :
void updateWave(float i) { strokeWeight(2); float prevY = 0.0; for (int x = 0; x < width; x ++) { float newY = sin(radians(-x*abs(ex)+r))*ey*i + height/2; if (x > 0) line(x-1, prevY, x, newY); prevY = newY; } r = millis()/8; }En lugar de crear una línea y tener que recordar el punto anterior, podría usar la función createShape() proporcionada por el procesamiento. To doc tiene algunos buenos ejemplos.
La idea es comenzar su forma con s = createShape() antes de iniciar el ciclo que llama a updateWave() en draw() . Luego, en updateWave() en lugar de crear un circle() , creará un nuevo s.vertex() en la forma.
Cuando esté fuera del ciclo, puede llamar a s.endShape() y luego puede llamar a shape(s) para dibujar la forma creada por estos puntos.