挑战

挑战

挑战

今天我想提出一个特别的 TikZ 挑战。我偶然发现了以下图片:

太阳系

它浓缩了大量的信息:每一行代表着对相应天体的一次任务!

问题

是否可以使用 TikZ 重现此图形?仅带环的行星就足够了,这只是一个概念证明。

理由

如果我看着这些线条,我就会想,这是多么艰苦的过程。对我来说,它尖叫着:自动化。而这正是 TikZ 所擅长的。

答案1

作为概念证明...

\documentclass{article}
\usepackage{tikz}
\begin{document}
\usetikzlibrary{calc}

\def\Earth#1#2{ % 1: pos, 2: size
\draw (#1) node[left color=blue!20!cyan, right color=blue!80!black, circle, minimum size=#2cm, inner sep=0pt] (Earth) {};
}

\def\Moon#1#2{ %1: pos, 2: size
\draw (#1) node[left color=black!10, right color=black!50, circle, minimum size=#2cm, inner sep=0pt] (Moon) {};
}

\begin{tikzpicture}
\fill[black] (0,0) rectangle (8,6);
\Earth{1,1}{0.8};
\Moon{5,4}{0.4};

\foreach \i in {1,...,35} {
  \pgfmathsetmacro{\tint}{\i*100/35};
  \draw[thick, red!\tint!yellow] (Moon) circle(0.2+\i/20);
}
\foreach \i in {1,...,35} {
  \pgfmathsetmacro{\a}{-\i/2};
  \draw[ultra thick, black] (Earth.\a) .. controls +(2,0-\i/20) and +(-3+\i/20,0) .. ($(Moon)+(-90:0.2+\i/20)$);
}
\foreach \i in {1,...,35} {
  \pgfmathsetmacro{\tint}{\i*100/35};
  \pgfmathsetmacro{\a}{-\i/2};
  \draw[thick, red!\tint!yellow] (Earth.\a) .. controls +(2,0-\i/20) and +(-3+\i/20,0) .. ($(Moon)+(-90:0.2+\i/20)$);    
}
\end{tikzpicture}
\end{document}

例子

可能的改进:

  1. 用于\includegraphics{}行星的真实图像
  2. 定义一组命名的颜色,如journey 1 colorjourney 2 color等,以便每条路径都可以用任意颜色绘制,而不是我使用的从黄色到红色的渐变色。
  3. 用下个月的时间完成这个图形,并手动调整计算贝塞尔控制点位置的公式中的神奇数字,以使其看起来美观。

相关内容