%20in%20tikz-3dplot.png)
Ich versuche eine Kurve zu zeichnen intikz-3dplot
das ist kein Kreisbogen. Ich möchte, dass er durch Kontrollpunkte angegeben wird, ähnlich wie tikz
bei (0,0) to [controls=+(45:1) and +(135:1)] (1,0)
. Ich weiß, dass ich mit einen Kreisbogen zeichnen kann \tdplotdrawpolytopearc
, aber ich konnte in der Dokumentation nichts darüber finden, wie man andere Kurventypen zeichnet. Wenn ich dieselbe Syntax wie für 2D-Kurven verwende, scheint eine Standardebene gewählt zu werden, in der die Kontrollpunkte wirken (scheint die xy-Ebene zu sein). Vielleicht gibt es eine Möglichkeit, diese Ebene zu wählen (und sie für jeden Punkt zu ändern)?
Hier ist ein MWE und eine Ausgabe für das, was ich habe:
\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}
Ich möchte auf der nach links gerichteten „Fläche“ dieses Prismas eine Kurve zeichnen, wie die schwarze Kurve, aber mit mehr „Stärke“ an den Endpunkten (wie eine Sinuskurve). Der fehlgeschlagene Versuch ist die rote Kurve, die in der Ebene der „unteren“ Fläche des Prismas zu liegen scheint.
Meine Frage ist also:Wie kann ich in 3D eine Kurve zeichnen, die kein Kreisbogen ist?
Antwort1
Es stimmt, dass das Handbuch von tikz-3dplot
diesbezüglich nicht allzu explizit ist. Meiner Meinung nach besteht die Hauptfunktion von jedoch tikz-3dplot
darin, eine orthonormale Projektion eines 3D-Koordinatensystems zu installieren. Abgesehen davon können Sie den Standard-Ti verwenden.kZ-Befehle.
Insbesondere können Sie parametrische Diagramme verwenden, um alles zu zeichnen, was Sie möchten.
\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}
In Ihrem Beispiel scheinen Sie jedoch nach einer Möglichkeit zu suchen, eine gewöhnliche Kurve auf eine der Flächen zu zeichnen. Dazu müssen Sie nur die 3d
Bibliothek verwenden und die Kurve in der Ebene zeichnen, die mit der entsprechenden Fläche zusammenfällt.
\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}
Diese Projektionen funktionieren nicht nur mit TikZ-Befehle aber auch mit externer Grafik.
\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}