作图纸 · 短片
正在点亮纸面……
星盘落定,星空流转
一台中世纪的天文仪器,照着 TikZ 代码画出来,再转到牛津日落
星盘是中世纪的天文仪器,转动上面那层镂空的星网,就能读出某一刻的天象。这支片子先用 TikZ 代码把一面星盘画出来,再让它转起来。一颗橙色火花照着代码作图,先画盘体,有盘沿、分四个象限的度数环、二十四小时环和顶上的悬环。再画纬盘,这一块按乔叟给牛津定的纬度 51°50′ 计算,盘上每一条线都是天上的一个圆从南天极投影下来,有回归线和赤道、地平线和晨昏蒙影线,还有每 2° 一圈的等高圈、每 10° 一条的方位线和夜里的十二个不等时。最后用作图线布好星网,一圈黄道和 43 颗亮星,位置推算到 2026 年。画完以后作图线收起,星网被切出来,时间从 10 月 4 日深夜开始快进。星网每个恒星日转一圈,太阳沿黄道慢慢移动,标尺跟着太阳扫过小时环,一直转到 10 月 10 日牛津日落。太阳压在地平线上,星盘停下,光从星网中心一道道往外流。每一帧都在浏览器里实时绘制。
- 速度
- 90 BPM · 30.75 小节
- 画面
- 作图引擎 · WebGL
- 程序
- 一段 TikZ 代码,60 行
- 星空
- 43 颗亮星,2026 年的位置 · 牛津 51°50′
- 声音
- YuE2 生成的音乐,加上依据作图过程合成的音效
章节5
TikZ 代码36 条语句
本片和 Astrolabe 的牛津纬盘用的是同一份 TikZ 代码,作图引擎和「作图纸」的其他几支短片相同。星盘上的字依据同一组数值另外刻出,星网在纬盘上面切出、转动。复制的代码会附带一行 \tikzset,用于声明本图专用的键;粘贴到加载了 TikZ 宏包的 LaTeX 文档中即可编译。
% title: 星盘 · 牛津纬盘% 从南天极作球极投影;正午(南)在上,东在左\begin{tikzpicture} % 母盘:盘沿与边缘的刻度环\draw[thick] (0,0) circle (5.22);\draw (0,0) circle (5.12);\draw (0,0) circle (4.62);\draw (0,0) circle (4.32); % 度数环:每度一刻,逢五加长,逢十拉到底\foreach \a in {0,1,...,359} \draw[very thin] (\a:4) -- (\a:4.1);\foreach \a in {0,5,...,355} \draw (\a:4) -- (\a:4.2);\foreach \a in {0,10,...,350} \draw (\a:4) -- (\a:4.32); % 小时环:二十四小时,正午在上,每刻钟一道细刻\foreach \a in {7.5,22.5,...,352.5} \draw (\a:4.62) -- (\a:5.12);\foreach \a in {0,3.75,...,356.25} \draw[very thin] (\a:4.62) -- (\a:4.74); % 悬环与吊环,在正午线上方\draw (-1.05,5.08) .. controls (-0.95,5.75) and (-0.35,5.82) .. (0,6.12) .. controls (0.35,5.82) and (0.95,5.75) .. (1.05,5.08);\draw (-0.62,5.28) .. controls (-0.5,5.62) and (-0.2,5.64) .. (0,5.82) .. controls (0.2,5.64) and (0.5,5.62) .. (0.62,5.28);\draw (0,5.72) circle (0.14);\draw (0,6.26) circle (0.14);\draw[thick] (0,6.62) circle (0.22); % 牛津纬盘,纬度 51°50′:南北回归线、赤道、子午线\draw[thick] (0,0) circle (4);\draw (0,0) circle (2.626);\draw (0,0) circle (1.724);\draw (0,-4) -- (0,4) (-4,0) -- (4,0); % 地平线与晨昏蒙影线(地平下 18°)\draw[semithick] (-3.34,2.064) arc (-180:2.442:3.34) (-3.337,2.206) arc (177.558:180:3.34);\draw[dashed] (-4,0.026) arc (-139.85:-40.15:5.233); % 等高圈:每 2° 一圈\draw[very thin] (-3.196,1.976) arc (-180:8.57:3.196) (-3.16,2.452) arc (171.43:180:3.196) (-3.06,1.896) arc (-180:15.206:3.06) (-2.953,2.698) arc (164.794:180:3.06) (-2.932,1.822) arc (-180:22.501:2.932) (-2.708,2.944) arc (157.499:180:2.932) (-2.81,1.753) arc (-180:30.701:2.81) (-2.416,3.188) arc (149.299:180:2.81) (-2.694,1.69) arc (-180:40.254:2.694) (-2.056,3.431) arc (139.746:180:2.694); % 2–10°\draw[very thin] (-2.584,1.632) arc (-180:52.177:2.584) (-1.584,3.673) arc (127.823:180:2.584) (-2.478,1.578) arc (-180:70.418:2.478) (-0.831,3.913) arc (109.582:180:2.478) (-2.377,1.528) arc (-180:180:2.377) (-2.28,1.481) arc (-180:180:2.28) (-2.187,1.438) arc (-180:180:2.187); % 12–20°\draw[very thin] (-2.097,1.398) arc (-180:180:2.097) (-2.011,1.36) arc (-180:180:2.011) (-1.927,1.325) arc (-180:180:1.927) (-1.846,1.292) arc (-180:180:1.846) (-1.768,1.262) arc (-180:180:1.768); % 22–30°\draw[very thin] (-1.692,1.233) arc (-180:180:1.692) (-1.618,1.206) arc (-180:180:1.618) (-1.546,1.181) arc (-180:180:1.546) (-1.476,1.157) arc (-180:180:1.476) (-1.408,1.135) arc (-180:180:1.408); % 32–40°\draw[very thin] (-1.341,1.115) arc (-180:180:1.341) (-1.275,1.096) arc (-180:180:1.275) (-1.211,1.078) arc (-180:180:1.211) (-1.149,1.061) arc (-180:180:1.149) (-1.087,1.045) arc (-180:180:1.087); % 42–50°\draw[very thin] (-1.027,1.031) arc (-180:180:1.027) (-0.967,1.017) arc (-180:180:0.967) (-0.909,1.005) arc (-180:180:0.909) (-0.851,0.993) arc (-180:180:0.851) (-0.795,0.982) arc (-180:180:0.795); % 52–60°\draw[very thin] (-0.739,0.972) arc (-180:180:0.739) (-0.683,0.963) arc (-180:180:0.683) (-0.628,0.955) arc (-180:180:0.628) (-0.574,0.947) arc (-180:180:0.574) (-0.52,0.94) arc (-180:180:0.52); % 62–70°\draw[very thin] (-0.467,0.934) arc (-180:180:0.467) (-0.414,0.929) arc (-180:180:0.414) (-0.362,0.924) arc (-180:180:0.362) (-0.309,0.92) arc (-180:180:0.309) (-0.257,0.916) arc (-180:180:0.257); % 72–80°\draw[very thin] (-0.206,0.913) arc (-180:180:0.206) (-0.154,0.911) arc (-180:180:0.154) (-0.103,0.91) arc (-180:180:0.103) (-0.051,0.909) arc (-180:180:0.051); % 82–88° % 方位线:过天顶的大圆,每 10° 一条\draw[very thin] (0.734,3.932) arc (162.709:170:24.469) (0,0.908) arc (10:17.291:24.469) (1.456,3.726) arc (145.335:160:12.423) (0,0.908) arc (20:34.665:12.423) (2.15,3.373) arc (127.811:150:8.498) (0,0.908) arc (30:52.189:8.498) (2.79,2.866) arc (110.119:140:6.61) (0,0.908) arc (40:69.881:6.61) (3.337,2.201) arc (92.361:130:5.547) (0,0.908) arc (50:87.639:5.547) (3.291,1.494) arc (80.172:120:4.906) (0,0.908) arc (60:99.828:4.906) (3.129,0.895) arc (69.52:110:4.522) (0,0.908) arc (70:110.48:4.522) (2.897,0.402) arc (60.151:100:4.315) (0,0.908) arc (80:119.849:4.315) (2.626,0) arc (51.833:90:4.249) (0,0.908) arc (90:128.167:4.249) (2.335,-0.324) arc (44.366:80:4.315) (0,0.908) arc (100:135.634:4.315) (2.037,-0.583) arc (37.582:70:4.522) (0,0.908) arc (110:142.418:4.522) (1.737,-0.789) arc (31.343:60:4.906) (0,0.908) arc (120:148.657:4.906) (1.44,-0.95) arc (25.535:50:5.547) (0,0.908) arc (130:154.465:5.547) (1.146,-1.073) arc (20.06:40:6.61) (0,0.908) arc (140:159.94:6.61) (0.855,-1.165) arc (14.837:30:8.498) (0,0.908) arc (150:165.163:8.498) (0.568,-1.227) arc (9.795:20:12.423) (0,0.908) arc (160:170.205:12.423) (0.283,-1.264) arc (4.869:10:24.469) (0,0.908) arc (170:175.131:24.469); % 不等时:地平线以下的夜间十二时\draw[very thin] (1.263,-1.173) arc (280.186:335.972:3.58) (1.054,-1.364) arc (263.586:308.214:3.985) (0.816,-1.518) arc (245.355:278.826:4.745) (0.557,-1.631) arc (225.219:247.533:6.442) (0.282,-1.7) arc (203.219:214.376:11.999) (0,-4) -- (0,-1.724) (-1.406,-3.745) arc (325.624:336.781:11.999) (-2.633,-3.012) arc (292.467:314.781:6.442) (-3.523,-1.894) arc (261.174:294.645:4.745) (-3.964,-0.535) arc (231.786:276.414:3.985) (-3.899,0.893) arc (204.028:259.814:3.58); % 星网,按 2026.0 历元、恒星时 0 布好:黄道与星点\draw[help lines] (1.138,0) circle (2.862);\draw[help lines] (1.138,0) circle (2.622);\foreach \x/\y in {-0.065/1.538,-0.411/1.28,-0.143/0.773,-0.881/0.808,-0.749/0.595,-0.915/1.455,-1.833/0.691,-2.974/0.581,-1.043/0.19,-2.324/0.342,-2.306/0.034,-3.461/-0.709,-1.334/-0.596,-1.41/-0.71,-2.172/-1.02,-1.876/-2.42,-0.987/-1.89,-0.157/-0.645,-0.085/-2.034,0.269/-3.583,1.181/-2.976,0.446/-0.869,1.052/-1.547,1.31/-0.954,1.957/-1.301,2.519/-1.232,3.554/-1.454,2.094/-0.219,0.917/-0.011,1.241/0.207,1.982/1.054,1.679/1.341,0.818/0.701,0.412/0.487,1.892/2.927,1.22/1.835,0.955/3.33,0.467/1.947,0.373/1.526,-0.701/3.535,-1.483/2.768,-1.753/1.698,-2.603/2.786} \draw[help lines] (\x,\y) circle (.05); \end{tikzpicture}