%20%D0%B2%20tikz-3dplot.png)
Я пытаюсь нарисовать кривуюtikz-3dplot
это не дуга окружности. Я бы хотел, чтобы она была задана контрольными точками, подобно тому, как tikz
имеет (0,0) to [controls=+(45:1) and +(135:1)] (1,0)
. Я знаю, что могу нарисовать дугу окружности с помощью \tdplotdrawpolytopearc
, но я не смог найти ничего в документации о том, как нарисовать какой-либо другой тип кривой. Если я использую тот же синтаксис, что и для 2D-кривых, похоже, выбирается плоскость по умолчанию, в которой действуют контрольные точки (кажется, плоскость xy). Может быть, есть способ выбрать эту плоскость (и изменить ее для каждой точки)?
Вот MWE и вывод того, что у меня есть:
\documentclass[tikz]{standalone}
\usepackage{tikz,tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{75}{130}
\begin{tikzpicture}[tdplot_main_coords]
% Shape and boundary
\draw[blue] (0,0,0)--(-1,1,0);
\fill[green,fill opacity=.8] (0,0,0)--(0,1,0)--(-1,1,0)--(-1,1,1)--(0,0,1);
\draw[blue] (0,0,0)--(0,1,0)--(-1,1,0)--(-1,1,1)--(0,1,1)--(0,0,1)--(0,0,0);
\draw[blue] (0,0,1)--(-1,1,1) (0,1,0)--(0,1,1);
% Natural guess how to draw curve
\draw[red] (0,0,0) to [controls=+(45:1) and +(135:1)] (0,1,0);
% Closest documented way how to draw curve
\tdplotdefinepoints(0,.5,-.3)(0,-.5,.3)(0,1.5,.3)
\tdplotdrawpolytopearc{.583}{}{}
\end{tikzpicture}
\end{document}
Я хотел бы нарисовать кривую на "грани" этой призмы, которая смотрит влево, как черная кривая, но с большей "силой" на конечных точках (как синусоида). Неудачная попытка - красная кривая, которая, кажется, находится в плоскости "нижней" грани призмы.
Итак, мой вопрос:Как нарисовать кривую в 3D, которая не является дугой окружности?
решение1
Правда, в руководстве по tikz-3dplot
не слишком подробно об этом говорится. Однако, IMHO, главная функция tikz-3dplot
— установить ортонормальную проекцию 3D-системы координат. Кроме того, можно использовать стандартный TiкZ-команды.
В частности, вы можете использовать параметрические графики, чтобы нарисовать все, что захотите.
\documentclass[tikz]{standalone}
\usepackage{tikz,tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{75}{130}
\begin{tikzpicture}[tdplot_main_coords]
% Shape and boundary
\draw[blue] (0,0,0)--(-1,1,0);
\fill[green,fill opacity=.8] (0,0,0)--(0,1,0)--(-1,1,0)--(-1,1,1)--(0,0,1);
\draw[blue] (0,0,0)--(0,1,0)--(-1,1,0)--(-1,1,1)--(0,1,1)--(0,0,1)--(0,0,0);
\draw[blue] (0,0,1)--(-1,1,1) (0,1,0)--(0,1,1);
\draw plot[variable=\x,domain=0:1] (0,\x,{0.3*sin(\x*180)});
\end{tikzpicture}
\end{document}
Однако в вашем примере вы, похоже, ищете способ нарисовать обычную кривую на одной из граней. Для этого вам нужно всего лишь воспользоваться библиотекой 3d
и нарисовать кривую в плоскости, совпадающей с соответствующей гранью.
\documentclass[tikz]{standalone}
\usepackage{tikz,tikz-3dplot}
\usetikzlibrary{3d}
\begin{document}
\tdplotsetmaincoords{75}{130}
\begin{tikzpicture}[tdplot_main_coords]
% Shape and boundary
\draw[blue] (0,0,0)--(-1,1,0);
\fill[green,fill opacity=.8] (0,0,0)--(0,1,0)--(-1,1,0)--(-1,1,1)--(0,0,1);
\draw[blue] (0,0,0)--(0,1,0)--(-1,1,0)--(-1,1,1)--(0,1,1)--(0,0,1)--(0,0,0);
\draw[blue] (0,0,1)--(-1,1,1) (0,1,0)--(0,1,1);
\begin{scope}[canvas is yz plane at x=0]
\draw[red] (0,0) to [controls=+(45:1) and +(135:1)] (1,0);
\end{scope}
%\draw plot[variable=\x,domain=0:1] (0,\x,{0.3*sin(\x*180)});
\end{tikzpicture}
\end{document}
Эти проекции работают не только с TiкКоманды Z, но даже с внешней графикой.
\documentclass[tikz]{standalone}
\usepackage{tikz,tikz-3dplot}
\usetikzlibrary{3d}
\begin{document}
\tdplotsetmaincoords{75}{130}
\begin{tikzpicture}[tdplot_main_coords]
% Shape and boundary
\draw[blue] (0,0,0)--(-1,1,0);
\fill[green,fill opacity=.8] (0,0,0)--(0,1,0)--(-1,1,0)--(-1,1,1)--(0,0,1);
\draw[blue] (0,0,0)--(0,1,0)--(-1,1,0)--(-1,1,1)--(0,1,1)--(0,0,1)--(0,0,0);
\draw[blue] (0,0,1)--(-1,1,1) (0,1,0)--(0,1,1);
\begin{scope}[canvas is xz plane at y=1,transform shape]
\node at (-0.5,0.5) {\includegraphics[width=0.9cm]{example-image-duck}};
\end{scope}
%\draw plot[variable=\x,domain=0:1] (0,\x,{0.3*sin(\x*180)});
\end{tikzpicture}
\end{document}