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;
}
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