我想知道在y轴和z轴上模拟日出/日落的最佳方法。目前它按照我的要求行动但行动速度太快(比如每隔3秒它就已经完成了整个太阳路径并且已经反向回到原点)。
我知道这与秒变量结合sin和cos有关,因为这个函数被调用并且每帧移动光的位置。基本上我希望它链接到我的游戏计时器50:
目前我有:
lightPosition = Point_E3d(0,
std::abs(100 *std::cos(seconds)),
-100 * std::sin(seconds));
想知道实现此效果的正确代码格式是什么。
答案 0 :(得分:1)
这只是简单的三角学。正弦(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。