TiKz를 사용하여 6개의 점이 있는 구 그리기

TiKz를 사용하여 6개의 점이 있는 구 그리기

그래서 저는 TiKz를 사용하여 이미지를 얻으려고 노력하고 있습니다. 제가 염두에 두고 있는 것은 다음과 같습니다.

여기에 이미지 설명을 입력하세요

내가 누락된 것은 올바른 레이블(주로 그리스 문자 eta, xi 및 zeta)입니다. 또한 구 표면에 있는 것처럼 보이는 0, 1 및 $\infty$를 가리키는 화살표를 찾고 있습니다. 이것에 대해 조금 생각해 보았고 그것은 elipse의 일부일 수 있지만 분명한 것처럼 나는 그것을 달성하는 방법을 모릅니다.

지금까지 가지고 있는 코드와 렌더링된 이미지는 다음과 같습니다.

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

관련 정보