【问题标题】:Moon phase with svg graphics in node js节点js中带有svg图形的月相
【发布时间】:2018-02-28 19:16:23
【问题描述】:

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

  1. 月相
  2. SVG 或任何月相图形表示
  3. 该日期的照明

我试过了: suncalc 但在这个包中SunCalc.getMoonIllumination() 满足照明和相位但从相位说它是否是满月是棘手的。而且它没有图形表示。

【问题讨论】:

  • 您可能需要找到/创建自己的月球图形
  • @FredStark 好的,我可以使用我自己的图形,但我再次从这里得到的阶段:github.com/mourner/suncalc#moon-illumination 从来都不是满月的 0.5 或 0.75,所以我总是处于中间阶段。我能做些什么呢?我的意思是任何一轮技术?
  • 这个工作Math.round(SunCalc.getMoonIllumination(new Date()).phase * 4) / 4吗?
  • 不确定我的格式,但希望我已经回答了你的问题 :)

标签: javascript node.js astronomy


【解决方案1】:

我认为 SVG 没有附带软件包,因此您需要自己获取/制作这些软件包。

至于让 SunCalc 为实际位于 00.250.50.75 的相位提供一个不错的数字,最简单的方法是进行一些舍入:

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

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

或者(如您在 cmets 中指定的那样)如果您希望它仍然经历上盈/亏亏部分并坚持满月/新月/四分之一大约一天,您可以四舍五入到最接近的 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 的因数。所以有些数字会返回 0.25 的倍数
  2. 因为它接近以天为单位的月球周期长度 (~29.53)

这意味着我们最终将结果四舍五入到每个值大约一天

【讨论】:

  • 谢谢你,这几乎解释了我所需要的一切。但是最后一个问题 getMoonIllumination 函数需要日期和时间,所以我应该在一天中的哪个时间通过当前或任何特定的时间(这可能是为了更准确)?
  • 你只需要测试最适合你的。您可能还需要查看时区如何影响结果
  • Np :D 非常感谢!你拯救了我的一天:)
猜你喜欢
  • 1970-01-01
  • 2021-08-14
  • 2011-08-25
  • 2023-03-05
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
相关资源
最近更新 更多