Серая затененная сфера с tikz-3dplot

Серая затененная сфера с tikz-3dplot

Как нарисовать сферу в оттенках серого с помощью tikz-3dplot? Я пробовал использовать \tdplotsphericalsurfaceplotс радиусом, равным 1, иparametricfill в зависимости от сферических углов. Однако, похоже, что я могу только задать оттенок цвета (в пространстве HSB), согласноследующий пост, что мне не подходит. Я мог бы пойти до конца и переопределить \tdplotdosurfaceplot, но это кажется излишним.

Позвольте мне подчеркнуть, что я хочуистинный3D рисунок (остальная часть моей картинкитребует3D-координаты: мне нужно рисовать дуги), поэтому я не могу использовать 2D-трюки, такие как

\draw [ball color=white] (0,0,0) circle (1) ;

так что этонетдубликаткак-нарисовать-заштрихованную-сферу. Я определенно хочу 3D-чертеж, желательно с tikz-3dplot, хотя я открыт и для других 3D-пакетов.

Вот два МВЭ: первая сфера использует равномерную окраску, а вторая — линейную комбинацию сферических углов:

\begin{tikzpicture}[tdplot_main_coords]
\tdplotsphericalsurfaceplot[parametricfill]{24}{24}{1} {black}{50}{}{}{}
\begin{scope}[xshift=4cm]
\tdplotsphericalsurfaceplot[parametricfill]{24}{24}{1} {black}{\tdplottheta+\tdplotphi}{}{}{}
\end{scope}
\end{tikzpicture}

Я бы также хотел избавиться от параметрических линий... Возможно, это не тот пакет, с которым нужно работать, или не та команда в пакете. введите описание изображения здесь

решение1

Лучшее использование pgfplots(адаптировано изэта почта). Параметрическая заливка \theta+\phiвыглядит, на мой взгляд, довольно странно.

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{tikzpicture}
  \begin{axis}
    [
      width=6cm,height=6cm,
      axis equal,enlargelimits=false,
      axis lines=none,
      domain=0:180,samples=21,
      y domain=0:360,samples y=21,
      colormap/blackwhite,
      view={100}{10},
    ]
    \addplot3
      [
        surf,
        z buffer=sort,
        shader=flat,
        point meta={acos(z/sqrt(x*x+y*y+z*z)) + atan2(y,x)}
      ] (
        {sin(x)*cos(y)},
        {sin(x)*sin(y)},
        {cos(x)}
      );
  \end{axis}
\end{tikzpicture}
\end{document}

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

решение2

Попробовав кое-что тут и там, я пришел к приемлемому решению, которое использует tikz-3dplot(с недостатками, см. ниже). Вот MWE, показывающий сферический треугольник, нарисованный на затененной сфере. Для других оттенков просто перейдите накак-нарисовать-заштрихованную-сферу.

Решение ниже частично обманывает: оно рисует не затененную сферу, а затененный 2D-диск в перспективе; поэтому его нужно вращать в 3-мерном пространстве, чтобы он выглядел как сфера (отсюда и повернутые координаты). Однако сферические координаты дуг верны.

\documentclass[11pt]{article}
\usepackage{tikz,tikz-3dplot}
\tdplotsetmaincoords{80}{110}

\begin{document}
\begin{figure}
\begin{center}
\begin{tikzpicture}[scale=3,tdplot_main_coords]
    % spherical background
    \tdplotsetrotatedcoords{20}{80}{0}
    \draw [ball color=white,very thin,tdplot_rotated_coords] (0,0,0) circle (1) ;
    % equator
    \draw [dashed] (0,0,0) circle (1) ;
    % spherical triangle
    \tdplotdefinepoints(0,0,0)(0.8,-0.4,-0.4)(0.4,0.8,-0.4)
    \tdplotdrawpolytopearc[thick]{1}{}{}
    \tdplotdefinepoints(0,0,0)(0.4,0.8,-0.4)(0.45,0.22,0.9)
    \tdplotdrawpolytopearc[thick]{1}{}{}
    \tdplotdefinepoints(0,0,0)(0.45,0.22,0.9)(0.8,-0.4,-0.4)
    \tdplotdrawpolytopearc[thick]{1}{}{}
\end{tikzpicture}
\end{center}
\end{figure}
\end{document}

Еще одним недостатком является неудобный синтаксис tikz-3dplotдля определения дуг и тот факт, что его нельзя смешивать с coordinateкомандой. сферический треугольник на заштрихованной сфере

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