Courbe sinusoïdale inégale
Je ne suis pas mathématicien, donc excuses pour mon manque de connaissances / terminologie.
Pour le cycle jour / nuit dans un jeu vidéo, j'aimerais utiliser une onde sinusoïdale pour déterminer l'éclairage de la scène. (Où$X$ est le nombre de secondes écoulées)
Pour ce graphique, j'aimerais que le point maximum soit $1$ et le point minimum pour être $0$.
Je voudrais que toute la journée / nuit prenne $15$ minutes, ou $900$secondes. (Je crois donc que ce serait une "période" de$900$, même si je ne suis pas sûr)
Mais c'est là que les choses deviennent trop complexes pour moi. J'aimerais que la durée de la nuit soit la moitié de la journée. En d'autres termes, la durée de la montée$0.5$ à $1$ être deux fois la durée du creux de $0.5$ à $0$.
Toute aide avec ce problème serait très appréciée par moi et mon équipe!
EDIT: je voudrais qu'il commence à 1
Réponses
La façon la plus simple de le faire est de prendre deux ondes sinusoïdales, disons $f$ et $g$, avec $g$ avoir la moitié de la période de $f$, et assemblez-les en conséquence:
Laissez le paramètre $t$ être considéré comme du temps, et $f(t)$ la luminosité à la fois $t$. Nous admettrons la luminosité entre$-1$ et $1$, qui peut être converti à volonté (par exemple hauteur $-1 = 50$ lumens et hauteur $1 = 50,000$ lumens).
Laisser $f(t) = \sin(t)$, et $g(t) = -\sin(2t)$. Définissez une nouvelle fonction:$$ F(t) = \begin{cases} f(t), & t \in [0,\pi], \\ g(t), & t\in [\pi,\frac{3\pi}{2}]. \end{cases} $$ Remarquerez que $f(\pi) = g(\pi) = 0$, alors $F$est continue (comme on pourrait l'espérer une fonction de luminosité dans un jeu vidéo). De plus,$F$ peut être copié côte à côte indéfiniment, pour former une nouvelle fonction qui sera $\frac{3\pi}{2}$périodique. Pour être technique, la fonction que vous voulez vraiment est (où$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} $$ Vous trouverez ci-dessous un exemple de ce à quoi cela ressemblerait $2$ cycles:
Oui, la période serait de 900 secondes. Puisque votre plage est de 0 à 1, votre amplitude est de 0,5 et votre ligne médiane est également de 0,5.
En supposant qu'il n'y ait pas de déphasage (vous commencez à votre ligne médiane lorsque le soleil se lève), la fonction de base que vous allez utiliser est $f(t)=a\sin(\frac{2\pi}{P}t)+m$, où $P$ est la période, $a$ est l'amplitude, et $m$est la ligne médiane. Pour l'instant, nous partirons$P$ seul et dire $a=m=.5$donc tu as $f(t)=.5\sin(\frac{2\pi}{P}t)+.5$.
Comme cela a été suggéré, une fonction par morceaux est probablement la plus simple. Cependant, comme il y a deux parties de jour pour une partie de nuit, vous devez avoir les deux tiers de la période occupée par la première moitié du cycle et un tiers par la seconde moitié du cycle. Cela signifie quatre tiers d'une période complète pour le jour et deux tiers pour la nuit.
Vous pouvez faire les calculs intermédiaires pour vous-même pour le vérifier si vous le souhaitez, mais vous vous retrouvez avec $D(t)=.5\sin(\frac{\pi}{600}t)+.5$ pour la journée et $N(t)=.5\sin(\frac{\pi}{300}t)+.5$pour la nuit. Pour les aligner correctement, introduisez un décalage de phase dans la fonction nuit pour obtenir$N(t)=.5\sin(\frac{\pi}{300}t-2\pi)+.5$.
À partir de là, je recommanderais de calculer le temps en jeu sur un cycle répétitif afin que vous puissiez simplement définir le domaine de cette fonction comme $[0,900)$, et puis cela devrait fonctionner. Pour clarifier, votre fonction de temps ressemble à ceci:
$$ 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}. $$
Edit: Je viens de remarquer que vous vouliez que cela commence à 1. Dans ce cas, réglez simplement le minuteur pour qu'il démarre 300 secondes.