そこで私はTiKzを使って画像を作成しようとしています。私が考えているのは次のようなものです
私が欠けているのは正しいラベル、主にギリシャ文字の eta、xi、zeta です。また、球の表面にあるように見える 0、1、$\infty$ を指す矢印を探しています。これについて少し考えましたが、楕円の一部である可能性がありますが、明らかなように、それを実現する方法がわかりません。
これまでに作成したコードとレンダリングされた画像は次のとおりです。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{3d}
\begin{document}
\begin{tikzpicture}[scale=2]
% Define sphere
\draw (0,0) circle [radius=1];
% Draw equator
\draw[dashed] (90:1) arc (90:270:1);
% Draw ellipse
\draw[dashed] (1,0) arc (0:180:1 and 0.3);
\draw (-1,0) arc (180:360:1 and 0.3);
% Draw points
\foreach \angle/\label/\pos in {30/A/above left, 150/B/above left, 90/C/above, -30/X/below left, -150/Y/below left, -90/Z/below} {
\node (\label) at (\angle:1) [circle, fill, inner sep=0.03cm, label=\pos:\label] {};
}
% Draw arrows
\foreach \from/\to in {A/B, B/C, C/X} {
\draw[->] (\from) -- (\to);
}
% Draw dashed lines for perspective
\draw[dashed] (1,0) -- (B);
\draw[dashed] (1,0) -- (C);
\end{tikzpicture}
\end{document}
ほぼ点Cだけが正しい位置にありますが、そこに$\infty$を入れようとするとエラーが発生します。
Missing \endcsname inserted.
<to be read again>
\infty
l.17 }
アドバイスやご指摘をいただければ幸いです。
答え1
手書きで描画する方法と、スクリーンコピーを同様の方法で実行する方法を以下に示します。注意:
- 一般的に、一度に多くのことを試さないでください。ループは、さまざまなものを組み合わせようとするため、ここでは困難です。
- 3Dライブラリを使用しなかったので、削除しました
- 半径は定数である可能性があり、もう少し忍耐強く
calc
ここで導入することができます - スタイルはあなたの味方です。つまり、コードを理解しやすくするのです。
dots
ここには円の形をした塗りつぶされたノードがあります- 楕円には、
pos
名前が本当に関連している2つの追加ノードを異なる場所に配置しました。 - 構文的には、パスは で始まり
\
、 で終わり;
、その間にあるものはすべて実行するアクションです (したがって、これらのノードは で始まりません\
) - 他の点も座標だったかもしれない。私が求めているのは名前だ。
- 極座標表記を見てください。これは、半径定数についていくつかの考慮が必要であることを再度示しています。
- 今ではラベルを付けたり、曲線を描いたりするのはほとんど簡単です
\documentclass[border=3mm]{standalone} % adding some border
\usepackage{tikz}
%\usetikzlibrary{3d} % it's not used
\usetikzlibrary{arrows.meta} % for nicer arrow tips
% ~~~ constants ~~~~~~~~~~~~~~~~~~~~~
\newcommand\rd[0]{2}
\newcommand\rdm[0]{(-2,0)} % can be done better with calc
\begin{document}
\begin{tikzpicture}%[scale=2] % that's not too good to do
[
dot/.style={fill=black,circle,inner sep=1pt},
as/.style={anchor=south},
ae/.style={anchor=east},
aw/.style={anchor=west},
>={Stealth}, % replacing all arrow tips
]
% Define sphere
\draw (0,0) circle [radius=\rd{}];
% Draw equator
\draw[dashed] (90:\rd{}) arc (90:270:\rd{});
% Draw ellipse + adding some nodes (with names)
\draw[dashed] (\rd{},0) arc (0:180:\rd{} and 0.3);
\draw \rdm{} arc (180:360:\rd{} and 0.3)
node[pos=.55,dot] (Zero) {}
node[pos=.70,dot] (One) {};
% ~~~ other points ~~~~~~~~~
\node[dot] (Inf) at (0,\rd{}) {};
\node[dot] (Eta) at (130:1.5) {};
\node[dot] (Ksi) at (220:1.0) {};
\node[dot] (Zet) at (340:1.6) {};
% ~~~ putting labels ~~~~~~~
\node[as] at (Inf) {$\infty$};
\node[as] at (Zero){$0$};
\node[as] at (One) {$1$};
\node[ae] at (Eta) {$\eta$};
\node[ae] at (Ksi) {$\xi$};
\node[aw] at (Zet) {$\zeta$};
% ~~~ arrows: bender was here ~~~~~
\draw[->] (Zet) -- (One); % start this way
\draw[->] (Eta) to[bend left] (Inf); % refine later
\draw[->] (Ksi) to[bend right] (Zero);
% % Draw points
% \foreach \angle/\label/\pos in {30/A/above left, 150/B/above left, 90/C/above, -30/X/below left, -150/Y/below left, -90/Z/below} {
% \node (\label) at (\angle:1) [circle, fill, inner sep=0.03cm, label=\pos:\label] {};
% }
% % Draw arrows
% \foreach \from/\to in {A/B, B/C, C/X} {
% \draw[->] (\from) -- (\to);
% }
% % Draw dashed lines for perspective
% \draw[dashed] (1,0) -- (B);
% \draw[dashed] (1,0) -- (C);
\end{tikzpicture}
\end{document}