球场上的太阳:我们如何算出它何时刺眼
一步步拆解 PlayPadel 如何预测塔什干每片球场的太阳:NOAA 天文算法、球场朝向、刺眼评分,再用真实场馆逐一验证。

目录
清晨七点那一记被你打飞的 bandeja(板式网球里的一种过顶击球,介于高球与扣杀之间),未必全是你的错。有时太阳正好挂在球场尽头,直直射进眼睛,每一个头顶球都成了碰运气。正因如此,PlayPadel 上每一片球场的页面都带有一个「球场上的太阳」模块:它会告诉你今天哪些时段打球舒服,哪些时段低垂的太阳会贴着场地扫过来。下面是一次诚实的拆解——从太阳在天空中的位置,一直讲到最终「舒适 / 一般 / 刺眼」的结论。没有玄学,只有天文学和几何。
我们到底在计算什么
这个模块回答的问题很简单:一天中的每个时刻,太阳在天空的哪个方位,它会不会妨碍这片球场上的球员? 要回答它,只需要两样东西:
- 太阳的位置——两个角度:朝哪个方位,离地平线多高。这是纯粹的天文学,取决于日期、纬度、经度和时区。
- 球场的几何——它的长轴指向哪里。低太阳顺着长轴打过来会刺眼;同样的太阳从侧面来,就完全不碍事。
其余一切都由这两点推导而来。整个计算是完全动态的——它会按今天的日期和场馆的真实坐标重新计算,所以夏天和冬天的结果完全不同。你可以在塔什干的任意一片球场页面上看到它的实时效果。
太阳的两个角度:方位角与高度角
任何一刻,太阳的位置都由两个数字确定。
- 方位角——指向太阳的罗盘方向:0° 是正北,90° 正东,180° 正南,270° 正西(从北起顺时针计)。
- 高度角——太阳在地平线之上的角度:0° 正好贴着地平线,90° 则是正头顶。

让你睁不开眼的,不是泛泛的「太阳很亮」,而是这两个角度的一种特定组合:太阳必须够低(高度角很小),并且正卡在球场尽头(方位角与长轴对齐)。所以第一步,就是把这两个角度都算准。
太阳在哪里:NOAA 算法
要得到方位角和高度角,我们用的是标准的 NOAA 太阳位置算法——也就是美国国家海洋和大气管理局那个 Solar Calculator 背后的同一套算法。它的精度可达零点几度,对「刺眼还是不刺眼」这种问题来说绰绰有余。输入是:日期、纬度 lat、经度 lng 和时区偏移。接下来是一连串换算。
第一步:儒略日与儒略世纪
日历日期首先被转换成儒略日(JD)——天文学家常用的连续天数计数——再由它换算出自 J2000.0 历元以来经过的儒略世纪数:
T = (JD − 2451545.0) / 36525
T 是后续所有公式的「时钟」:太阳的视运动会在百年尺度上缓慢漂移,几乎每一个系数都依赖于 T。
第二步:太阳赤纬
赤纬 δ 就是太阳此刻正悬在头顶那一点的「纬度」。正是它驱动了四季:夏天 δ ≈ +23.4°,冬天 ≈ −23.4°。它由平黄经 L0、平近点角 M、中心差 C 和黄赤交角 ε 推算而来:
λ = the Sun's true longitude (corrected for the orbit's ellipticity) // 太阳真黄经(已对轨道椭率作修正)
ε = obliquity of the ecliptic (≈ 23.44°) // 黄赤交角
δ = arcsin( sin(ε) · sin(λ) )
第三步:时差与时角
真正的太阳日并不恰好是 24 小时——因为地轴倾斜和轨道椭率。这个差值就是时差(EoT),一年之中大约在 −14 到 +16 分钟之间游走。借助它,本地钟表时间被换算成真太阳时,再进一步换算成时角 ha(太阳偏离正午正南方向的角度;0° 即太阳正午):
true_solar_time = local_minutes + EoT + 4·lng − 60·tz (mod 1440) // 真太阳时
ha = true_solar_time / 4 − 180 // degrees, −180…180 // 时角,单位为度
第四步:高度角与方位角
接下来用一点球面三角学。由纬度、赤纬和时角,先得到天顶角(也就得到了高度角),再得到方位角:
cos(zenith) = sin(lat)·sin(δ) + cos(lat)·cos(δ)·cos(ha)
elevation = 90 − zenith
azimuth = from arccos( (sin(lat)·cos(zenith) − sin(δ)) / (cos(lat)·sin(zenith)) ),
signed by whether ha is before or after noon // 符号由 ha 在正午前还是正午后决定
同一组公式还能算出日出、正午和日落:日出和日落是太阳高度角穿过 −0.833° 的时刻(计入大气折射和日面可见半径后的标准地平线),而正午则是太阳一天中的最高点(即过中天的时刻,并用时差方程加以校正)。这些全是纯函数,不需要联网,所以这个模块在服务器和你的浏览器里跑出来的结果完全一致。
太阳何时直射眼睛:球场几何
天文学告诉了我们太阳在哪。现在的问题是:它会不会妨碍你?球场最关键的属性是它的长轴朝向(从北起算、以度为单位的方位:0° 是南北轴,90° 是东西轴)。一片板式网球场有两个尽头,无论哪一对球员,至少有一半的回合都正对着长轴——所以两个方向都危险:orientation 和 orientation + 180°。

由此得出规则:太阳成为问题,必须两个条件同时满足——它够低 并且 落在球场尽头 ±30° 以内。高悬的太阳(在头顶)即便正对长轴也不刺眼;偏到侧面的低太阳同样无碍。一片长轴接近南北向的球场几乎是理想的:低垂的太阳从东方升起、向西方落下——也就是从侧面来。
给不适感打分:「低 × 对齐」
为了把这套几何变成一个数字,我们计算两个介于 0 和 1 之间的因子,再把它们相乘。
alignDiff = angular distance from the azimuth to the nearest court end (0…180°) // 方位角到最近球场尽头的角距
alignFactor = max(0, 1 − alignDiff / 30°) // 1 = straight down an end, 0 = ≥30° off // 1=正对尽头,0=偏离≥30°
lowFactor = max(0, 1 − elevation / 30°) // 1 = on the horizon, 0 = above 30° // 1=贴近地平线,0=高于30°
glare = alignFactor · lowFactor // 0…1
用乘积、而不是用求和,正是关键所在:只有又低又对齐同时发生时,得分才会高。只要任一因子归零(太阳升高了,或者偏到了侧面),glare 就立刻塌缩为零。接下来设三道阈值:
glare 评分 | 结论 | 含义 |
|---|---|---|
| ≥ 0.45 | 刺眼 | 低太阳正对尽头——直射眼睛 |
| ≥ 0.15 | 一般 | 接近长轴,但还不致命 |
| 其他 | 舒适 | 太阳够高,或偏在侧面 |

在上面这张图里,「刺眼」(红色)只占据了左下角——高度角低、再加上离尽头的偏角很小。其余整片区域都是舒适的。这正是为什么一片球场时间轴上的大多数时段都是绿色:太阳要么够高,要么偏得够侧。
顶棚与墙壁投下的阴影
对于带顶和带遮阳棚的球场,我们还会单独画出地面上的阴影。几何原理相同——影子的长度取决于遮挡物的高度和太阳的高度角:
L = obstacle_height / tan(elevation) // 影长 = 遮挡物高度 / tan(高度角)
- 遮阳棚(屋顶约 6 m)从上方遮挡:正午高悬的太阳几乎被屋顶完全挡住,而低太阳则会「钻」到屋檐下,照亮地面。阴影占比 = 被遮区域的矩形面积 ÷ 球场面积(20×10 m)。
- 开放式球场没有屋顶,只有玻璃墙投下阴影——沿着受光边缘形成的细条(我们对其作了上限处理,因为现实中这类球场几乎全部暴露在阳光下)。
所以像 Padel.uz — Humo Arena 这样球场类型混合的场馆,模块会为每种类型单独出一张示意图:带顶球场和开放式球场在阳光下表现不同,订场时一眼就能看明白。
用真实球场来验证
检验这套模型的最佳方式,是用塔什干的真实场馆。我们取同一个夏日清晨的两片球场。

- Tennis & Padel City——长轴约 160°(接近南北向)。今天:04:51 日出,方位角约 58°(东北偏东);20:00 日落,方位角约 302°(西北偏西)——低太阳是从侧面来的。而当方位角真的与长轴对齐时(正午前后约 162°),太阳已经升到约 71° 高度——太高了,根本刺不到眼。结果:全天绿色。
- Humo Arena(开放式球场)——长轴约 58°(东北—西南向)。破晓时太阳几乎正对长轴升起,又悬得很低——于是出现了一段大约从 05:01 到 05:51 的「太阳直射眼睛」红色窗口。
同一座城市、同一天——唯一的差别就是朝向。这不是 bug,而是物理:一片面朝日出方向的球场,会把低太阳正好接进自己的尽头。
那冬天呢?
计算与日期绑定,所以季节会改变一切。还是这片 Tennis & Padel City,到了 12 月 21 日:太阳走得更低、更偏南,大约 11:05 时它正卡在尽头(方位角约 161°),高度却只有约 23°——这就成了一般(出现几个小时的黄色),不过始终够不到「刺眼」。所以夏天那条全绿的时间轴,到了 12 月会变样——在寒冷季节打开球场页面对比一下吧。
订场时怎么用它
这个模块真正的价值在于实用。打球之前:
- 在球场栏目下打开场馆页面,找到「球场上的太阳」模块。
- 看时间轴:绿色时段舒适,黄色尚可忍受,红色就是太阳直射眼睛。把滑块拖到你订场的时间,确认一下。
- 在球场类型混合的场馆,对照球场编号:模块会标出哪些球场(按编号)带顶、哪些是开放式。如果在红色时段想要遮阴,就选一片带顶球场。
- 如果你确实要迎着太阳打,那就把它当成战术的一部分:处于劣势的不只是你——正对太阳的那一对同样如此。想知道怎么利用这一点,可以读我们关于球场站位的拆解。
一副好的太阳镜和一顶帽子也有帮助——你可以在商店里挑一挑。如果你想把自己的球技再钻研得深一些,去找PlayPadel 的教练聊聊,或者看看即将到来的赛事。
常见问题
这套计算会随季节变化吗?
会,而且完全如此。太阳的位置是按今天的日期和球场的真实坐标计算的,所以夏天和冬天的画面不同:冬天太阳更低、更偏南,夏天没有「太阳直射眼睛」的地方,冬天可能就会冒出来。
它考虑了两边球员(两个尽头)吗?
考虑了。一片球场有两个尽头,模型会把指向太阳的方向同时与 orientation 和 orientation + 180° 作比对。无论哪一对球员正迎着低太阳,都会被计为不适。
为什么一片球场会全天「绿色」?
如果长轴接近南北向,日出和日落的低太阳都从侧面(东边和西边)照过来,而只有正午前后太阳才与长轴对齐——那时它已经很高了。于是构成刺眼的两个条件永远不会同时成立。
球场的朝向是从哪来的?
由场馆管理员设定——长轴从北起算、以度为单位的方位。我们会根据建筑的卫星几何来确定它,并在条件允许时用指南针到现场复核。
这套天文算法有多准?
NOAA 算法给出的太阳位置精度可达零点几度——远比「刺眼还是不刺眼」这个问题所需要的精细得多。而不适感的阈值是有意设得宽松的(±30°),所以球场朝向上的一点小误差,几乎不会改变结论。
它对室内球场有用吗?
完全室内的球馆地面照不到直射阳光,所以模块会显示一条相应的说明。至于带顶和开放式球场,我们会单独画出屋顶/墙壁的阴影——参见上文关于阴影的那一节。


