Desenhando uma curva (não necessariamente um arco) no tikz-3dplot

Desenhando uma curva (não necessariamente um arco) no tikz-3dplot

Estou tentando desenhar uma curvatikz-3dplotesse não é o arco de um círculo. Gostaria que fosse especificado por pontos de controle, semelhante a como tikzfoi feito (0,0) to [controls=+(45:1) and +(135:1)] (1,0). Eu sei que posso desenhar um arco de círculo com \tdplotdrawpolytopearc, mas não consegui encontrar nada na documentação sobre como desenhar qualquer outro tipo de curva. Se eu usar a mesma sintaxe das curvas 2D, parece que um plano padrão é escolhido no qual os pontos de controle atuam (parece o plano xy). Talvez haja uma maneira de escolher esse plano (e alterá-lo para cada ponto)?

Aqui está um MWE e uma saída para o que tenho:

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

insira a descrição da imagem aqui

Gostaria de desenhar uma curva na “face” desse prisma voltada para a esquerda, como a curva preta, mas com mais “força” nos pontos finais (como uma curva senoidal). A tentativa fracassada é a curva vermelha que parece estar no plano da face “inferior” do prisma.

Então, minha pergunta é:Como posso desenhar uma curva em 3D que não seja o arco de um círculo?

Responder1

É verdade que o manual do tikz-3dplotnão é muito explícito sobre isso. No entanto, IMHO a principal característica dotikz-3dplot é instalar uma projeção ortonormal de um sistema de coordenadas 3D. Além disso, você pode usar o Ti padrãokComandos Z.

Em particular, você pode usar gráficos paramétricos para desenhar o que quiser.

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

insira a descrição da imagem aqui

No entanto, no seu exemplo, você parece estar procurando uma maneira de desenhar uma curva comum em uma das faces. Para isso, basta utilizar a 3dbiblioteca e desenhar a curva no plano que coincide com a face correspondente.

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

insira a descrição da imagem aqui

Essas projeções funcionam não apenas com TikComandos Z, mas mesmo com gráficos externos.

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

insira a descrição da imagem aqui

informação relacionada