太阳运动(Y/Z运动)

Sun Movement (Y/Z movement)

本文关键字:运动 太阳      更新时间:2023-10-16

我想知道在y和z轴上模拟日出/日落的最佳方式。目前,它做了我想做的事,但移动得太快了(比如说,每3秒它就已经完成了整个太阳路径,并且已经反向移动回原点)。

我知道这与秒变量与sin和cos的组合有关,因为这个函数被称为,它每帧都会移动灯光的位置。基本上,我希望它能链接到我的游戏计时器50:

  • 50秒日出了
  • 25秒现在是中午
  • 0秒日落/比赛结束

目前我有:

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

想知道什么是正确的代码格式才能达到这种效果。

这只是一个简单的三角法。正弦(x*n)和余弦(x*n)的周期(直到函数重复的时间)均为2*pi/n。在这种情况下,n=1,因此周期为6.28,这意味着一整天(和一晚上)将持续6.28秒。如果要增加句点,请将seconds参数乘以一个小于1的数字。一点点代数表明:

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。