Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

288
Vistas
Procesamiento (Java): cómo hacer que una función de seno trazada parezca continua en lugar de puntos separados cuando aumenta la amplitud de la función

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!!

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

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; }
over 4 years ago · Santiago Trujillo Denunciar

0

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.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda