Использование узла или рисование окружности в tikz-3dplot

Использование узла или рисование окружности в tikz-3dplot

Я изучаю tikz-3dplotпакет для рисования объектов в 3d и столкнулся с проблемой. Я просто хочу нарисовать круг и сослаться на некоторые точки позже, но я обнаружил, что есть разница между использованием команды drawи использованием nodeкоманды:

\documentclass[tikz]{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}

\begin{document}
\tdplotsetmaincoords{70}{110}
\begin{tikzpicture}[tdplot_main_coords]
\draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
\draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
\draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};

\coordinate (O) at (0,0,0);
\tdplotsetcoord{P}{1}{70}{40}

\draw[-stealth,color=blue] (O) -- (P);

\node[draw, circle, radius=0.2] (cir) at (P) {};
\draw[red] (P) circle [radius=0.2];

\draw (cir.south) -- (cir.north);

\end{tikzpicture}%
\end{document}

Почему разница? Я хотел бы использовать node, как я могу ссылаться, например, на точки юга и севера для последующего использования, вероятно, проекции. Но использование nodeне дает правильной формы (я хочу, чтобы красный круг был нарисован, nodeчтобы я мог ссылаться на него). Я не понимаю, почему nodeне использует tdplot_main_coordsсистему координат. Спасибо.

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

решение1

Это потому, что вы рисуете окружность по умолчанию в плоскости xy. Вы можете нарисовать ее в экранных координатах, чтобы «синхронизировать» ее с узлом.

\documentclass[tikz]{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}

\begin{document}
\tdplotsetmaincoords{70}{110}
\begin{tikzpicture}[tdplot_main_coords]
\draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
\draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
\draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};

\coordinate (O) at (0,0,0);
\tdplotsetcoord{P}{1}{70}{40}

\draw[-stealth,color=blue] (O) -- (P);

\node[draw, circle, radius=0.2] (cir) at (P) {};
\draw[red,tdplot_screen_coords] (P) circle [radius=0.2];

\draw (cir.south) -- (cir.north);

\end{tikzpicture}%
\end{document}

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

Если вы хотите, чтобы узел был нарисован на xyплоскости, это можно сделать с помощью 3dбиблиотеки.

\documentclass[tikz]{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\usetikzlibrary{3d}

\begin{document}
\tdplotsetmaincoords{70}{110}
\begin{tikzpicture}[tdplot_main_coords]
\draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
\draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
\draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};

\coordinate (O) at (0,0,0);
\tdplotsetcoord{P}{1}{70}{40}

\draw[-stealth,color=blue] (O) -- (P);

\begin{scope}[canvas is xy plane at z=0,transform shape]
    \node[draw, circle, radius=0.2] (cir) at (P) {};
\end{scope} 
\draw[red] (P) circle [radius=0.2];
\draw (cir.south) -- (cir.north);

\end{tikzpicture}%
\end{document}

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

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