Curva sinusoidal desigual

Sep 02 2020

No soy matemático, así que me disculpo por mi falta de conocimiento / terminología.

Para el ciclo día / noche en un videojuego, me gustaría usar una onda sinusoidal para determinar la iluminación de la escena. (Dónde$X$ es el número de segundos transcurridos)

Para este gráfico, me gustaría que el punto máximo fuera $1$ y el punto mínimo para ser $0$.

Me gustaría tomar todo el día / noche $15$ minutos, o $900$segundos. (Así que creo que sería un "período" de$900$aunque no estoy seguro)

Pero aquí es donde las cosas se vuelven demasiado complejas para mí. Me gustaría que la noche dure la mitad del día. En otras palabras, la duración del aumento de$0.5$ a $1$ ser el doble de la duración de la inmersión desde $0.5$ a $0$.

¡Cualquier ayuda con este problema sería muy apreciada por mí y mi equipo!

EDITAR: Me gustaría que comenzara en 1

Respuestas

ccroth Sep 03 2020 at 03:54

La forma más sencilla de hacer esto es tomar dos ondas sinusoidales, digamos $f$ y $g$, con $g$ teniendo la mitad del período de $f$, y júntelos en consecuencia:

Deja que el parámetro $t$ ser considerado como tiempo, y $f(t)$ el brillo a la vez $t$. Admitiremos brillo entre$-1$ y $1$, que se puede convertir como se desee (por ejemplo, altura $-1 = 50$ lúmenes y altura $1 = 50,000$ lúmenes).

Dejar $f(t) = \sin(t)$y $g(t) = -\sin(2t)$. Defina una nueva función:$$ F(t) = \begin{cases} f(t), & t \in [0,\pi], \\ g(t), & t\in [\pi,\frac{3\pi}{2}]. \end{cases} $$ Darse cuenta de $f(\pi) = g(\pi) = 0$, entonces $F$es continuo (como podríamos esperar que fuera una función de brillo en un videojuego). Además,$F$ pueden copiarse una al lado de la otra indefinidamente, para formar una nueva función que será $\frac{3\pi}{2}$periódico. Para ser técnico, la función que realmente desea es (donde$n \in \mathbb{N}$): $$ G(t) = \begin{cases} f(t-\frac{3\pi n}{2}), & t \in [\frac{3\pi n}{2},\frac{3\pi n}{2} + \pi], \\ g(t-\frac{3\pi n}{2}), & t\in [\frac{3\pi n}{2} + \pi, \frac{3\pi n}{2} + \frac{3\pi}{2}]. \end{cases} $$ A continuación se muestra un ejemplo de cómo se vería iterado $2$ ciclos:

StephenGoree Sep 03 2020 at 05:04

Sí, el período sería de 900 segundos. Dado que su rango es de 0 a 1, su amplitud es .5 y su línea media también es .5.

Suponiendo que no hay cambio de fase (está comenzando en su línea media cuando sale el sol), la función básica que va a usar es $f(t)=a\sin(\frac{2\pi}{P}t)+m$, dónde $P$ es el período, $a$ es la amplitud, y $m$es la línea media. Por ahora nos vamos$P$ solo y decir $a=m=.5$, así que tienes $f(t)=.5\sin(\frac{2\pi}{P}t)+.5$.

Como se ha sugerido, una función por partes es probablemente la más sencilla. Sin embargo, dado que hay dos partes del día para una parte de la noche, es necesario que la primera mitad del ciclo ocupe dos tercios del período y la segunda mitad del ciclo, un tercio. Esto significa cuatro tercios de un período completo para el día y dos tercios para la noche.

Puedes hacer los cálculos intermedios por ti mismo para comprobarlo si quieres, pero terminas con $D(t)=.5\sin(\frac{\pi}{600}t)+.5$ por el día y $N(t)=.5\sin(\frac{\pi}{300}t)+.5$por la noche. Para que se alineen correctamente, introduzca un cambio de fase en la función nocturna para obtener$N(t)=.5\sin(\frac{\pi}{300}t-2\pi)+.5$.

A partir de aquí, recomendaría tener el tiempo en el juego calculado en un ciclo repetido para que pueda definir el dominio de esta función como $[0,900)$, y luego debería funcionar. Para aclarar, su función de tiempo se ve así:

$$ F(t) = \begin{cases}.5\sin(\frac{\pi}{600}t)+.5, t \in [0,600) \\ .5\sin(\frac{\pi}{300}t-2\pi)+.5, t\in [600, 900) \end{cases}. $$

Editar: Me estoy dando cuenta de que quería que comenzara en 1. En ese caso, simplemente configure el temporizador para que comience en 300 segundos.