我想知道在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。