Después de crear,
como ya hemos visto, un registro del tiempo, colocamos un punto
M (que representa una masa m) en una
distancia r del punto O. Si llamamos ω
a una velocidad angular constante (en radianes) y sustituimos en el
deslizador anima la instrucción:
Valor(M,
M + dt v)
por esta otra:
Valor(M, Rota(M,
dt ω, O))
entonces M
se desplazará en un movimiento circular uniforme
alrededor de
O.
En vez de usar el comando Rota,
podemos usar coordenadas polares. Veamos cómo. Así, podemos mover
M con la instrucción:
Valor(M,
O + (r ; t ω))
El ángulo que forma
M con el origen de coordenadas se obtiene con
arg(M-O).
Para contar llevar un registro
del tiempo empleado en cada vuelta y el número de vueltas realizadas,
creamos las listas reg y regDif:
reg = {0}
regDif = Si(Longitud(reg)
≟ 1, {reg(1)}, Secuencia(reg(k) - reg(k + 1), k, 1, Longitud(reg) - 1))
Así, el tiempo medio de
animación tras una vuelta completa, es decir, el período de la animación,
vendrá dado por:
T
= media(regDif)
Hallamos la media de todos los
períodos registrados porque aunque, teóricamente, todos ellos deberían ser
iguales, como la animación no sigue un movimiento continuo, sino a
intervalos dt, se pueden producir pequeñas desviaciones en cada
vuelta). Ahora basta añadir al guion del deslizador anima las
instrucciones:
Valor(reg, Si(y(M)
< 0 ∧ y(Rota(M,
dt ω, O)) ≥ 0, Añade(t, reg),
reg))
Valor(vueltas, Si(y(M)
< 0 ∧ y(Rota(M,
dt ω, O)) ≥ 0, vueltas + 1,
vueltas))
-
Nota: Como cualquier circunferencia mide 2π
radianes, el período teórico ha de valer 2π/ω.
En ese tiempo, M deberá recorrer la longitud
de la circunferencia 2πr, así que el módulo de la velocidad
tangencial v
(que aparece en la construcción) ha de ser igual a 2πr entre 2π/ω,
es decir, |v|
= ω r.
GUION DEL DESLIZADOR anima
# Calcula los segundos dt transcurridos; para
ello, suma un segundo si t1(1) < tt
Valor(tt, t1(1))
Valor(t1, Primero(TomaTiempo(), 3))
Valor(dt, (t1(1) < tt) + (t1(1) - tt)/1000)
# Registra
el tiempo de la vuelta y el número de vueltas realizadas
Valor(reg,
Si(arg(M - O) < 0 ∧ arg(M - O) + dt ω ≥ 0, Añade(t, reg), reg))
Valor(vueltas, Si(arg(M - O) < 0 ∧ arg(M - O) + dt ω ≥ 0, vueltas + 1,
vueltas))
# Mueve M
Valor(M, O
+ (r; t ω))