Рисование сферы с 6 точками с помощью TiKz

Рисование сферы с 6 точками с помощью TiKz

Итак, я пытаюсь получить изображение с помощью TiKz, вот что я имею в виду:

введите описание изображения здесь

Чего мне не хватает, так это правильных меток, в основном греческих букв эта, кси и дзета, также я ищу стрелки, указывающие на 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, где их названия действительно важны
  • синтаксически путь начинается с \, заканчивается на ;, а все, что находится между ними, — это действия, которые нужно выполнить (следовательно, эти узлы не начинаются с \)
  • другие точки тоже могли быть координатами; мне нужны названия
  • см. полярную нотацию, которая еще раз указывает на некоторые мысли, необходимые для радиус-константы
  • теперь наносить метки и рисовать изогнутые линии стало почти очевидным

результат

\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}

Связанный контент