Движение Солнца (движение Y / Z)

Мне интересно, как лучше всего смоделировать восход / закат по осям y и z. В данный момент он делает то, что я хочу, но движется слишком быстро (скажем, каждые 3 секунды он уже прошел весь солнечный путь и уже движется обратно назад к началу координат).

Я знаю, что это связано с переменной секунд в сочетании с sin и cos, так как эта функция вызывается и перемещает положение источника света в каждом кадре. В основном я хочу, чтобы это было связано с таймером моей игры 50:

  • 50 секунд восход
  • 25 секунд это полдень
  • 0 секунд это закат / игра окончена

В настоящее время у меня есть:

lightPosition = Point_E3d(0,
std::abs(100 *std::cos(seconds)),
-100 * std::sin(seconds));

Хотите знать, какой правильный формат кода для достижения этого эффекта.

-1

Решение

Это просто тригонометрия. Период (время до повторения функции) синуса (x * n) и косинуса (x * n) составляет 2 * pi / n. В этом случае n = 1, поэтому период равен 6,28, то есть один полный день (и ночь) будет длиться 6,28 секунды. Если вы хотите увеличить период, умножьте seconds аргумент числом меньше единицы. Немного алгебры показывает, что:

period of sin(x * n) = 2*pi / n
period of sin(.1256 * x) = 2*pi / .1256 = 6.28 / 0.1256 = 50

Поэтому берите синус и косинус секунд * 0.1256, а не секунд.

lightPosition = Point_E3d(0,
std::abs(100 *std::cos(seconds * 0.1256 )),
-100 * std::sin(seconds * 0.1256));

Обратите внимание, что это также в том числе в ночное время. Если вы хотите, чтобы период времени продолжительностью 12 часов длился 50 секунд, умножьте на половину 0,1256, или 0,0628.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]