Curva sinusoidale irregolare
Non sono un matematico, quindi mi scuso per la mia mancanza di conoscenza / terminologia.
Per il ciclo giorno / notte in un videogioco, vorrei utilizzare un'onda sinusoidale per determinare l'illuminazione della scena. (Dove$X$ è il numero di secondi trascorsi)
Per questo grafico, vorrei che fosse il punto massimo $1$ e il punto minimo da essere $0$.
Vorrei che tutto il giorno / notte prendesse $15$ minuti o $900$secondi. (Quindi credo che sarebbe un "periodo" di$900$, anche se non sono sicuro)
Ma è qui che le cose diventano troppo complesse per me. Vorrei che la durata della notte fosse mezza giornata. In altre parole, la durata dell'aumento da$0.5$ per $1$ essere il doppio della durata del tuffo da $0.5$ per $0$.
Qualsiasi aiuto con questo problema sarebbe molto apprezzato da me e dal mio team!
EDIT: vorrei che iniziasse da 1
Risposte
Il modo più semplice per farlo è prendere due onde sinusoidali, diciamo $f$ e $g$, con $g$ avente metà del periodo di $f$e uniscili di conseguenza:
Lascia che il parametro $t$ essere pensato come il tempo, e $f(t)$ la luminosità al momento $t$. Ammetteremo la luminosità tra$-1$ e $1$, che può essere convertito a piacere (es. altezza $-1 = 50$ lumen e altezza $1 = 50,000$ lumen).
Permettere $f(t) = \sin(t)$, e $g(t) = -\sin(2t)$. Definisci una nuova funzione:$$ F(t) = \begin{cases} f(t), & t \in [0,\pi], \\ g(t), & t\in [\pi,\frac{3\pi}{2}]. \end{cases} $$ Notare che $f(\pi) = g(\pi) = 0$, così $F$è continuo (come potremmo sperare che sia una funzione di luminosità in un videogioco). Inoltre,$F$ possono essere copiati fianco a fianco indefinitamente, per formare una nuova funzione che sarà $\frac{3\pi}{2}$periodico. Per essere tecnici, la funzione che vuoi veramente è (dove$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} $$ Di seguito è riportato un esempio di come apparirebbe ripetuto $2$ cicli:
Sì, il periodo sarebbe di 900 secondi. Poiché il tuo intervallo è compreso tra 0 e 1, la tua ampiezza è 0,5 e anche la linea mediana è 0,5.
Supponendo che non ci siano cambiamenti di fase (inizi dalla linea mediana mentre il sole sta sorgendo), la funzione di base che utilizzerai è $f(t)=a\sin(\frac{2\pi}{P}t)+m$, dove $P$ è il periodo, $a$ è l'ampiezza, e $m$è la linea mediana. Per ora, partiremo$P$ da solo e dire $a=m=.5$, così hai $f(t)=.5\sin(\frac{2\pi}{P}t)+.5$.
Come è stato suggerito, una funzione a tratti è probabilmente la più semplice. Tuttavia, poiché ci sono due parti di giorno per una parte di notte, è necessario che due terzi del ciclo mestruale siano occupati dalla prima metà del ciclo e un terzo dalla seconda metà del ciclo. Ciò significa quattro terzi di un intero periodo per il giorno e due terzi per la notte.
Puoi fare i calcoli intermedi per controllarlo se vuoi, ma finisci con $D(t)=.5\sin(\frac{\pi}{600}t)+.5$ per il giorno e $N(t)=.5\sin(\frac{\pi}{300}t)+.5$per la notte. Per farli allineare correttamente, introdurre uno spostamento di fase nella funzione notte per ottenere$N(t)=.5\sin(\frac{\pi}{300}t-2\pi)+.5$.
Da qui, consiglierei di calcolare il tempo di gioco su un ciclo ripetitivo in modo da poter definire il dominio di questa funzione come $[0,900)$e quindi dovrebbe funzionare. Per chiarire, la tua funzione temporale è simile a questa:
$$ 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}. $$
Modifica: sto notando solo ora che vuoi che inizi da 1. In tal caso, imposta il timer in modo che inizi a 300 secondi.