太阳运动(Y / Z运动)

时间:2015-11-19 22:21:37

标签: c++ axis game-development

我想知道在y轴和z轴上模拟日出/日落的最佳方法。目前它按照我的要求行动但行动速度太快(比如每隔3秒它就已经完成了整个太阳路径并且已经反向回到原点)。

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

  • 50秒日出
  • 中午25秒
  • 0秒它的日落/游戏结束

目前我有:

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

想知道实现此效果的正确代码格式是什么。

1 个答案:

答案 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。