viernes, 5 de mayo de 2017

EXTRA BALL - SIMULADOR DE ONDAS

Como proyecto adicional he conseguido plasmar una idea que lleva tiempo queriendo llevar a cabo: un simulador de ondas en processing. Tras algunos días he conseguido hacer que funcione. Para dibujar las ondas, el programa dibuja un círculo de radio 1 (un punto) en la posición (x,y) que le corresponde.

Los cálculos que he debido hacer han sido arduos, ya que los ordenadores procesan datos con una frecuencia del orden de GHz y, por esto, el abanico de frecuencias que se pueden usar es muy reducido, si se quiere conseguir una sola onda y no dibujos que siguen un patrón sinusoidal. Para solventar estos problemas, he usado una librería que permite añadir interfaces interactivas que cambian los parámetros del programa, restringiendo el mayor y el menor valor que se les puede dar a los parámetros que el usuario puede cambiar.

La librería se llama ControP5. En el programa, se pueden cambiar la amplitud y la frecuencia de la onda que se dibuja, y pulsando espacio, se borra la onda y se comienza a dibujar de nuevo.


Si se quiere probar el código, es necesario instalar la librería, ya que de lo contrario el programa no funcionará integramente. Descarga la librería aquí.
Mi código fuente es:

import controlP5.*;
ControlP5 MyController;

float t=0;
float x=0;
float y=0;
float frec=0;
float faseInicial;
float amplit;


void setup(){
  size(500,500);
  t = 0;
  amplit = 50;
  frec = 0.005;
  background (255);
  MyController = new ControlP5(this);
  MyController.addSlider("frec",0.001,0.02,0.005,300,50,100,10);
  MyController.setColorCaptionLabel(0);
  MyController.addSlider("amplit",0,100,50,300,60,100,10);
  MyController.setColorCaptionLabel(0);
  textSize(10);
  fill(0);
  text("Pulsa el espacio para borrar",300,30);
}

void draw(){
 
  tiempo();
  x = t;
  y = amplit * sin((2 *PI*frec*t));
  noStroke();
  fill(0);
  ellipse(x,y + height/2,1,1);
  if (keyPressed && key == ' '){
    t = 0;
    background(255);
    textSize(10);
    fill(0);
    text("Pulsa el espacio para borrar",300,30);
  }
 
}

void tiempo(){
  t = t + 0.5;
}

No hay comentarios:

Publicar un comentario