看月亮,猜时间

月亮,猜时间
neweroica
2007-01-02
 
如果在一个月朗星稀的夜晚,你没有带表或其他通讯工具,但却非常想知道时间,该怎么办?那么我可以告诉你,你可以看着月亮,然后就能知道大概是几点钟了。作为一个属于大自然的人,你是应该知道这种最原始而又自然的方法的。下面我就告诉你具体怎么做。
 
首先,你面向正南(我习惯面南,中国古人都是这个习惯,更重要的是这个方向能看到月亮),这样你的左手是东,右手是西(注意与现代地图的左西右东恰相反)。想象你面对的夜空是个大量角器,而你就是中心点。不过,你的头顶正上方的位置是零度角,左手方向的东半天空是负角度,右手西半天空是正角度。如下图所示:
 
                                                    (0 )
|
|
|           C
|
|
|
|
|
|
|
|
|
|
(-90 ) ------------------------- . ------------------------ 西 (90 )
 
下面我就告诉如何根据月亮在天空中的位置和月相来推测当前时间。
先用上图所示的“量角器”量出月亮所在位置的角度( A ),再根据月相估计出当天的阴历日数( D )。好了,将阴历日数乘以 12 ,再加上月亮角度,最后再除以 15 ,便是当前时刻的小时数。如果这个数大于 12 ,则表明已经过了午夜 12 点了,因此应减去 12 ,便是凌晨的小时数。
用公式表示就是:
H = ( D * 12 + A ) / 15
 
这个方法的原理是很简单的,仅仅涉及哥白尼以前的天文学和马克思时代的化学所需的简单数学。如果你有兴趣,不妨跟我一起做这次轻松的思维旅行。
 
首先,我们需要知道一个事实:在你能看到月亮的每天晚上,月亮由东向西走过天空。那么月亮婆婆她走得具体有多快呢?我可以告诉你,她每小时在天上走 15 度(整个笼盖四野的夜空是 180 度,再加上扣在南半球的白天天空的大盖子,整个完整的天球是 360 度)。想知道这是怎么得出的吗?其实月亮婆婆是很懒的,她自己整个晚上在天上是几乎不动的,真正动的是我们脚下的地球大叔,他不分昼夜地由西向东自转着,这是我们的视觉使用了“移形大法”欺骗了我们。因此,在我们看来,就好像月亮婆婆一直在由东向西散步。我们知道,一昼夜是 24 小时,因此,地球大叔自转的步速是 360/24 = 15 度/小时,通过“移形大法”,月亮婆婆每小时在天上由东向西走 15 度。换句话说,月亮婆婆每走 1度的天空,需要花1/15小时 = 4分钟。
其次,我们还需要知道一个事实:月亮在晚上升起的时间是一天比一天晚。这是由月亮围绕地球由西向东公转所造成的。我们想要知道的是,每隔一天,月亮婆婆起床的时间具体要晚多久。我们可以这样去想:一个阴历月的长短约为 30 天(当然小月是 29 天,但作为近似,关系不大)。这表明,月亮在天空中由西向东走完一周需要 30 天。这样,月亮婆婆每天在天上会向西走 360/30 = 12 度,这相当于她每晚散步 12*4 = 48 分钟的路程。因此,月亮婆婆每天比前一天要晚出来 48分钟。
知道了月亮的这两个运动规律,我们基本上就可以根据月相和月亮的位置来推测时间了。不过,我们还需要知道一个参照点,或者说一个初始条件。我一般总记住这个事实,因为它非常好记,那就是:
月圆之夜的午夜12点,月亮在你头顶的正上方。
好了,知道了这么多,现在我们就可以来推导了。我们从上述时间参照点,即阴历 15 (不过有时月圆之夜在阴历 16 ,但作为近似,无碍)的午夜 12 点出发。设阴历日期为 D ,时间的小时数为 H 。则这个初始参照时间为: D0 = 15, H0 = 12, A0 = 0 。根据前面关于月亮的两个运动规律,我们很容易得出下面的关系式:
H = H0 + [ ( D – D0 ) * 48 + ( A – A0 ) * 4 ] / 60
H = ( D * 12 + A ) / 15
 
好了,明白了吗?如果觉得有点意思,不妨告诉你的朋友们吧。
 
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要创建一个在Unity中实现月亮效果的Shader,您可以遵循以下步骤: 1. 创建一个新的着色器材质并将其分配给需要应用月亮效果的对象。 2. 在着色器中定义一个用于表示月亮位置的属性。例如,您可以使用一个名为"moonPosition"的属性来表示月亮的世界空间坐标。 3. 在顶点着色器中将该属性传递给片段着色器。 4. 在片段着色器中,计算从顶点到月亮位置的向量,并将其标准化。 5. 使用该向量和其他光照计算(例如漫反射和镜面反射)来模拟月亮照射场景的效果。您可以使用光照方程或其他技术来实现合适的着色效果。 6. 调整光照和材质属性以达到所需的效果。您可以尝试调整月亮的亮度、颜色和反射等因素来达到更逼真的效果。 这是一个简单的示例,用于将月亮的光照效果应用于场景中的对象。请注意,这只是一个基本的示例,并且您可以根据需要进行自定义和改进。 ```csharp Shader "Custom/MoonShader" { Properties { _MoonPosition ("Moon Position", Vector) = (0, 0, 0, 0) } SubShader { Tags { "RenderType"="Opaque" } Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag // 月亮位置属性 uniform float4 _MoonPosition; // 顶点着色器 struct appdata { float4 vertex : POSITION; }; struct v2f { float4 vertex : SV_POSITION; float3 worldPos : TEXCOORD0; }; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; return o; } // 片段着色器 fixed4 frag (v2f i) : SV_Target { // 计算从顶点到月亮位置的向量 float3 moonVector = normalize(_MoonPosition.xyz - i.worldPos); // 在这里进行光照计算和其他着色操作 // 返回最终的颜色值 return fixed4(1, 1, 1, 1); } ENDCG } } } ``` 请确保将_MoonPosition属性设置为适当的月亮位置,以便正确计算月亮照射效果。此示例只提供了一个基本的框架,您可以根据自己的需求进行更多的定制和改进。希望这对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值