Неравномерная синусоида
Я не математик, поэтому приношу свои извинения за отсутствие знаний / терминологии.
Для цикла день / ночь в видеоигре я хотел бы использовать синусоидальную волну для определения освещения сцены. (Где$X$ это количество прошедших секунд)
Для этого графика я бы хотел, чтобы максимальная точка была $1$ и минимальная точка $0$.
Я бы хотел провести целый день / ночь $15$ минут или $900$секунд. (Так что я считаю, что это будет "период"$900$хотя я не уверен)
Но здесь все становится для меня слишком сложным. Я бы хотел, чтобы продолжительность ночи была полдня. Другими словами, продолжительность подъема от$0.5$ к $1$ быть вдвое больше продолжительности падения с $0.5$ к $0$.
Любая помощь с этой проблемой будет очень признательна мне и моей команде!
РЕДАКТИРОВАТЬ: я бы хотел, чтобы это началось с 1
Ответы
Самый простой способ сделать это - взять две синусоидальные волны, скажем $f$ и $g$, с участием $g$ имея половину периода $f$, и соедините их соответственно:
Пусть параметр $t$ считаться временем, и $f(t)$ яркость во время $t$. Допустим яркость между$-1$ и $1$, который может быть преобразован по желанию (например, высота $-1 = 50$ люмены и высота $1 = 50,000$ люмен).
Позволять $f(t) = \sin(t)$, и $g(t) = -\sin(2t)$. Определите новую функцию:$$ F(t) = \begin{cases} f(t), & t \in [0,\pi], \\ g(t), & t\in [\pi,\frac{3\pi}{2}]. \end{cases} $$ Заметить, что $f(\pi) = g(\pi) = 0$, так $F$непрерывно (как мы могли бы надеяться, что функция яркости в видеоигре будет). Более того,$F$ можно бесконечно копировать бок о бок, чтобы сформировать новую функцию, которая будет $\frac{3\pi}{2}$периодический. Говоря техническим языком, вам действительно нужна функция (где$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} $$ Ниже приведен пример того, как это будет выглядеть повторно. $2$ циклы:
Да, период будет 900 секунд. Поскольку ваш диапазон составляет от 0 до 1, ваша амплитуда составляет 0,5, а средняя линия также 0,5.
При условии отсутствия фазового сдвига (вы начинаете со средней линии при восходе солнца) основная функция, которую вы собираетесь использовать, - это $f(t)=a\sin(\frac{2\pi}{P}t)+m$, где $P$ это период, $a$ - амплитуда, а $m$это средняя линия. А пока мы уйдем$P$ один и сказать $a=m=.5$, так что у тебя есть $f(t)=.5\sin(\frac{2\pi}{P}t)+.5$.
Как уже было сказано, проще всего использовать кусочную функцию. Однако, поскольку на одну часть ночи приходится две части дня, вам нужно, чтобы две трети периода занимала первая половина цикла, а одна треть - вторая половина цикла. Это означает четыре трети полного периода на день и две трети на ночь.
Вы можете провести промежуточные вычисления для себя, чтобы проверить это, если хотите, но в итоге вы получите $D(t)=.5\sin(\frac{\pi}{600}t)+.5$ на день и $N(t)=.5\sin(\frac{\pi}{300}t)+.5$на ночь. Чтобы они правильно выстроились, введите фазовый сдвиг в функцию ночи, чтобы получить$N(t)=.5\sin(\frac{\pi}{300}t-2\pi)+.5$.
Отсюда я бы рекомендовал рассчитывать игровое время на повторяющийся цикл, чтобы вы могли просто определить область этой функции как $[0,900)$, и тогда он должен работать. Чтобы уточнить, ваша функция времени выглядит так:
$$ 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}. $$
Изменить: я только сейчас заметил, что вы хотели, чтобы он начинался с 1. В этом случае просто установите таймер на запуск через 300 секунд.