Define las variables globales que consideres adecuadas,
actualiza sus valores en la función draw() y
muestra el resultado que te piden.
La idea es que en cada frame obtengas una
mejor aproximación al valor que te solicitan.
|
Comprueba experimentalmente las siguientes convergencias:
-
\(\lim_{n\to\infty} \frac{1}{n^p} = 0 \hbox{ si } p > 0\). Utiliza un acumulador o contador creciente.
float p; int n; // Mejor un double ¿por qué? /* Completa con comentarios */ void setup() { p = 1; // Puedes probar varios p, para ver la "velocidad" de convergencia. n = 100; // Cuanto más grande sea ... antes me aproximo. } /* Completa con comentarios */ void draw() { println(1.0/pow(n,p)); n = n+1; }
-
\(\lim_{x\to 0} \frac{tan(x)}{sen(x)}=1\). Pista: Usa una expresión que contenga un acumulador o contador creciente.
float x; int n; // Mejor un double ¿por qué? /* Completa con comentarios */ void setup() { n = 100; // Cuanto más grande sea ... antes me aproximo. } /* Completa con comentarios */ void draw() { x = 1.0/n; println(tan(x)/sin(x)); n = n+1; }
-
Comprueba experimentalmente que la función \(\frac{2}{x-3}\) no es continua en el punto \(x=3\). Pista: Utiliza una expresión que tienda a cero y súmale \(\pm 3\).
Para que una función sea continua en un punto se tiene que cumplir que el límite por la izquierda y el límite por la derecha de la función en dicho punto sean iguales.
float xIzda, xDcha; int n; // Mejor un double ¿por qué? /* Completa con comentarios */ void setup() { n = 100; // Cuanto más grande sea ... antes me aproximo. } /* Completa con comentarios */ void draw() { xIzda = 3+1.0/n; xDcha = 3-1.0/n; println(abs(2/(xIzda-3) - 2/(xDcha-3))); n = n+1; }
-
Calcula el límite de la siguiente serie.
Se define el n-ésimo número triangular como el dado por la expresión \(T_n = \frac{n(n+1)}{2}\). La serie de los recíprocos de los números triangulares converge al número 2; es decir:
\[\frac{1}{1}+\frac{1}{3}+\frac{1}{6}+\frac{1}{10}+\frac{1}{15}+\cdots = 2\]Haz un programa que demuestre la convergencia de la serie de los recíprocos a los números triangulares mostrando tanto la suma acumulada como el error absoluto de la aproximación; pero dichos datos solo se actualizan y se muestran cada vez que se pulse una tecla.
/* Completa con comentarios */ float n, sumatorio; /* Completa con comentarios */ void setup() { sumatorio=0; n=1; } /* Completa con comentarios */ void draw() { float numTriangular = (n*(n+1))/2.0; sumatorio += 1.0/numTriangular; n++; } /* Completa con comentarios */ void keyPressed() { println("Sumatorio = " + sumatorio + " # Error: " + abs(2-sumatorio)); }
Considera el siguiente código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 float theta=0;
void setup() {
size(400, 400);
noFill();
strokeWeight(3);
stroke(255, 0, 0, 2);
smooth();
}
void draw() {
float dt = PI/4;
translate(width/2, height/2);
rotate(theta);
ellipse(0, 0, 0.9*width, 0.25*height);
theta = theta + dt;
}
-
¿Cuáles son las variables locales y globales de este programa? ¿Cuáles son sus ámbitos de aplicación?
-
Comenta el programa indicando el objetivo de las instrucciones.
-
Dibuja en un papel la figura que saldrá en la ventana gráfica. Busca, si fuera necesario, la referencia de las funciones que desonozcas. No ejecutes el código.
-
Modifica la línea 12 para asignar
dt=PI/100;
y la línea 15 porrotate(sin(theta));
. ¿Qué crees que pasará ahora?. No ejecutes el código.Recuerda que la función seno es una función periódica con valores entre -1 y 1, y que el argumento de la función
rotate()
se asume con valores entre0
yTWO_PI
radianes. -
Ejecuta este programa y el programa modificado para comprobar tus figuras con las reales.
Explicación General:
- Las variables son:
- Globales: width, height, theta. Sus ámbitos son todo el programa.
- Locales: dt y su ámbito es solo la función draw().
- El comportamiento de cada función es:
- setup(): establece el tamaño de la ventana gráfica, las figuras no tendrán color de relleno, las líneas tendrán color rojizo "transparente" de grosor 3px. Las líneas se suavizarán.
- draw(): lo que se vaya a dibujar tendrá como centro de coordenadas el centro de la ventana gráfica y será rotada en la cantidad que establezca theta. Como esta variable se incrementa en una cantidad de PI/4 (45 grados), theta tomará los valores sexagesimales: 0, 45, 90, 135, 180, 215, 270, 315 y 360. Realmente toma más valores pero como rotate() asume valores entre 0 y 2PI a efectos prácticos solo toma esos. La figura que se dibujará será una elipse inscrita en un rectángulo con largo igual al 90% del ancho de la ventana y un alto igual al 25% del alto de la ventana gráfica, que irá rotando conforme varíe el valor de theta.
La intersección de todas las elipse "dibujará" un cículo en el centro
El dibujo final es similar al típico símbolo de un átomo con 3 órbitas.
- Ahora la rotación no se hará entera, pues se rota entre -1 radianes y 1 radianes (entre -360/(2PI) grados y 360/(2PI) grados - unos 57 grados). Es decir la elipse "se columpiará" de arriba a abajo. "Subirá" hasta llegar a una rotación de 1 radianes y entonces "bajará" hasta llegar a una rotación de -1 radianes; para volver a "subir" y repetir el proceso. Además, por la función seno, habrá más "concentración" de elipses en los valores extremos de -1 y 1 radianes.
Haz un programa que trace una línea entre los dos puntos de la pantalla gráfica correspondientes al lugar donde el usuario haya hecho dos click consecutivos. Cada vez que se pulse una tecla se borrará el contenido de la pantalla y se volverá a empezar.
Para el primer click se considerará que su punto "anterior" es:
-
el centro de la ventana gráfica, cuando se inicie la ejecución del programa, o bien
-
un punto aleatorio de la ventana gráfica cada vez que se pulse una tecla.
Este programa pretende mostrar una bola que aparece una y otra vez de izquierda a derecha aumentando de tamaño: En cada frame la bola "da un paso" hacia la derecha, pero en el momento en el que el centro de la bola "sale" por la derecha, entonces la bola "entra" por la izquierda. En cada paso, el diámetro de la bola aumenta una cantidad.
Además, cada vez que se pulsa una tecla la bola vuelve a tener su diámetro inicial (es un punto).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 float x; // Coordenada x de la posición
float y; // Coordenada y de la posición
void setup() {
x=width/2;
y=height/2;
}
void draw () {
float d=1;
ellipse(x, y, d, d);
x = (x + 1) % (width+d); // Modificación de la posición
d = (d + 10/width) % height ; // Modificación del radio
}
void keyPressed() {
float d=1;
}
-
Indica cuáles son la variables locales y globales.
-
Haz la traza y responde:
-
¿En qué cantidad se incrementa la posición y radio de la elipse en cada iteración?
-
Si se produce un cambio en esos valores, ¿por qué no se consigue el objetivo deseado de que el círculo aumente su tamaño?
-
Respetando la estructura general del programa, corrige las declaraciones y asignaciones de las variables para conseguir el efecto que se indica en el enunciado.
-