Curva sinusoidal irregular

Sep 02 2020

Eu não sou um matemático, então peço desculpas por minha falta de conhecimento / terminologia.

Para o ciclo dia / noite em um videogame, gostaria de usar uma onda senoidal para determinar a iluminação da cena. (Onde$X$ é o número de segundos decorridos)

Para este gráfico, gostaria que o ponto máximo fosse $1$ e o ponto mínimo para ser $0$.

Eu gostaria que todo o dia / noite $15$ minutos, ou $900$segundos. (Então eu acredito que seria um "período" de$900$, embora eu não tenha certeza)

Mas é aqui que as coisas ficam muito complexas para mim. Eu gostaria que a duração da noite fosse metade do dia. Em outras palavras, a duração do aumento de$0.5$ para $1$ ter o dobro da duração do mergulho de $0.5$ para $0$.

Qualquer ajuda com este problema seria super apreciada por mim e minha equipe!

EDITAR: gostaria que começasse em 1

Respostas

ccroth Sep 03 2020 at 03:54

A maneira mais simples de fazer isso é pegar duas ondas senoidais, digamos $f$ e $g$, com $g$ tendo metade do período de $f$, e junte-os de acordo:

Deixe o parâmetro $t$ ser pensado como o tempo, e $f(t)$ o brilho na hora $t$. Admitiremos brilho entre$-1$ e $1$, que pode ser convertido conforme desejado (por exemplo, altura $-1 = 50$ lumens e altura $1 = 50,000$ lumens).

Deixei $f(t) = \sin(t)$, e $g(t) = -\sin(2t)$. Defina uma nova função:$$ F(t) = \begin{cases} f(t), & t \in [0,\pi], \\ g(t), & t\in [\pi,\frac{3\pi}{2}]. \end{cases} $$ Notar que $f(\pi) = g(\pi) = 0$, então $F$é contínuo (como podemos esperar que seja uma função de brilho em um videogame). Além disso,$F$ pode ser copiado lado a lado indefinidamente, para formar uma nova função que será $\frac{3\pi}{2}$periódico. Para ser técnico, a função que você realmente deseja é (onde$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} $$ Abaixo está um exemplo de como ficaria iterado $2$ ciclos:

StephenGoree Sep 03 2020 at 05:04

Sim, o período seria de 900 segundos. Como seu intervalo é de 0 a 1, sua amplitude é 0,5 e sua linha média também é 0,5.

Presumindo que não haja mudança de fase (você está começando na linha média quando o sol está nascendo), a função básica que você vai usar é $f(t)=a\sin(\frac{2\pi}{P}t)+m$, Onde $P$ é o período, $a$ é a amplitude, e $m$é a linha média. Por enquanto vamos embora$P$ sozinho e dizer $a=m=.5$, Então você tem $f(t)=.5\sin(\frac{2\pi}{P}t)+.5$.

Como foi sugerido, uma função por partes é provavelmente a mais fácil. No entanto, como há duas partes do dia para uma parte da noite, você precisa ter dois terços do período ocupados na primeira metade do ciclo e um terço na segunda metade do ciclo. Isso significa quatro terços de um período completo para o dia e dois terços para a noite.

Você pode fazer os cálculos intermediários por si mesmo para verificar se quiser, mas você acaba com $D(t)=.5\sin(\frac{\pi}{600}t)+.5$ para o dia e $N(t)=.5\sin(\frac{\pi}{300}t)+.5$para a noite. Para que eles se alinhem corretamente, introduza uma mudança de fase para a função noturna para obter$N(t)=.5\sin(\frac{\pi}{300}t-2\pi)+.5$.

A partir daqui, eu recomendaria ter o tempo do jogo calculado em um ciclo de repetição para que você possa apenas definir o domínio desta função como $[0,900)$, e então deve funcionar. Para esclarecer, sua função de tempo se parece com isto:

$$ 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: Só agora estou percebendo que você queria que ele começasse em 1. Nesse caso, basta definir o cronômetro para iniciar 300 segundos em.