月相与节点js中的svg图形

时间:2018-02-28 19:16:23

标签: javascript node.js astronomy

我正在寻找可以实现的方法/ npm包:

  1. 月相
  2. SVG或月相的任何图形表示
  3. 该日期的照明
  4. 我试过了: suncalc 但是在这个包中,SunCalc.getMoonIllumination()满足了光照和阶段,但从相位说起,如果它是满月或不是很棘手。它没有图形表示。

1 个答案:

答案 0 :(得分:3)

我不认为SVG附带有软件包,因此您需要自己提供/生成这些软件包。

至于让SunCalc为00.250.50.75实际上所处的阶段提供一个很好的数字,最简单是做一些舍入:

如果您想直接对这些数字进行舍入,可以舍入到最近的四分之一:

var date = new Date();
Math.round(SunCalc.getMoonIllumination(date).phase * 4) / 4;

或者(正如你在评论中指出的那样)如果你想让它仍然通过打蜡/减弱部分并坚持满月/新月/季度大约一天,你可以四舍五入到最近的第28位:

var date = new Date();
Math.round(SunCalc.getMoonIllumination(date).phase * 28) / 28;

为什么这样做?为什么28?

因此,最简单的解释方法是再次查看季度示例。我们希望舍入的数字与其中一个选项(0, 0.25, 0.5, 0.75)匹配。

因为Math.round舍入到最接近的整数,我们希望这些结果成为我们可以舍入的整数。通过将它们乘以4得到:

0    * 4 = 0
0.25 * 4 = 1
0.5  * 4 = 2
0.75 * 4 = 3

我们在这些之间得到的所有东西最终会四舍五入到其中一个(除了一些圆到5,我们需要自己缠绕)。

然后我们将结果除以相同的乘数,以使数字回到预期的范围内。

现在有28个作品,原因有两个:

  1. 4是因子28.所以有些数字会以.25
  2. 的倍数返回
  3. 因为它接近月球周期的长度(~29.53)
  4. 这意味着我们最终将结果四舍五入到每个值大约一天