TikZ/PGF 中地心系统中的行星之舞

TikZ/PGF 中地心系统中的行星之舞

我使用的代码来自 TikZ/PGF 中的维纳斯之舞(及其变奏)

我在用着

\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);
    draw for t=0 upto 359: 108 dir 13t - 147 dir 8t .. endfor cycle;
endfig;
\end{mplibcode}
\end{document}

它绘制了地心系统中行星的舞蹈。它工作得很好,但数字太小了。当我试图绘制海王星和冥王星的舞蹈时,它不起作用。

海王星
轨道周期 - 163.7:1(比例)
海王星到太阳的距离 - 44.742 亿公里 - 缩放至 4474

冥王星
轨道周期 - 247.9:1(比例)
海王星到太阳的距离 - 59.06 亿公里 - 5906 比例

因此,当我尝试绘制海王星的舞蹈时,它不起作用

\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);
    draw for t=0 upto 359: 4474 dir 1t - 147 dir 164t .. endfor cycle;
endfig;
\end{mplibcode}
\end{document}

有人能帮我吗?:)
也许我应该使用不同的比例或别的什么?
我几乎拥有所有行星的舞蹈,但只缺少 3 个:
朱诺
海王星
冥王星

行星概况介绍(NASA)
https://nssdc.gsfc.nasa.gov/planetary/factsheet/planet_table_ratio.html

答案1

首先,你需要允许luamplib处理大数字(大于 4096),因此添加这个

\mplibnumbersystem{double}

添加到文档的序言部分。(参见这个Q有关选项的更多详细信息)。但是,你会发现结果看起来有点奇怪,因为路径上没有足够的点来制作平滑的曲线。所以你需要做这样的事情:

\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibnumbersystem{double}
\begin{mplibcode}
beginfig(1);
    numeric s; s = 1/8;
    draw for t=0 step s until 360 - s: 4474 dir 1t - 147 dir 164t .. endfor cycle;
endfig;
\end{mplibcode}
\end{document}

这样看起来会更好,但是数字会很大,因此您可能需要直接缩放它:

\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibnumbersystem{double}
\begin{mplibcode}
beginfig(1);
    numeric s; s = 1/8;
    draw (for t=0 step s until 360 - s: 4474 dir 1t - 147 dir 164t .. endfor cycle) scaled 1/32;
endfig;
\end{mplibcode}
\end{document}

笔记:您需要编译它,lualatex以便可以使用该luamplib库。

相关内容