Рисование кривой (не обязательно дуги) в tikz-3dplot

Рисование кривой (не обязательно дуги) в tikz-3dplot

Я пытаюсь нарисовать кривую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}

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

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