
Ich habe vor Kurzem angefangen, mich mit dem Zeichnen von 3D-Zeichnungen zu beschäftigen. Ich versuche, mit der Tikz-3D-Bibliothek eine 3D-Zeichnung zu zeichnen. Aber ich habe einige Probleme.
hauptsächlich Befehle wie circle
, arc
, und rectangle
scheinen in der dritten Dimension nicht zu funktionieren, was Sinn macht, da sie in der Ebene funktionieren. Um dies zu umgehen, gibt das pgf-Handbuch an, dass Sie einfach eine Ebene und die Stelle auf dem Normalvektor auswählen können, an der Sie sein möchten, und dann auf dieser Ebene zeichnen können. Im pgf-Handbuch (3.1.6a, Abschnitt 40.3) tun sie dies in der scope
Umgebung. Das Problem dabei ist, dass Sie dann nicht außerhalb der Ebene zeichnen können.
Daher habe ich mich gefragt, ob es eine Möglichkeit gibt, eine Ebene für Befehle wie circle
, arc
, und auszuwählen rectangle
, ohne einen Bereich einzugeben. Die Idee ist, dass ich diese Befehle in einen größeren Zeichen- oder Füllbefehl integrieren möchte, beispielsweise indem ich das Koordinatensystem in der Mitte eines Pfads ändere:
\draw (0,0,0) -- ++(1,0,0) arc [yzplane at x=1, start angle=0, end angle = 180, radius=1] -- cycle;
Mein konkretes Problem ist unten dargestellt. Ich habe einen Kreis auf die Ebene gelegt yz
und möchte, dass dieser der Kreis eines Kegels ist. Ich kann dann Linien zu den Rändern dieses Kreises zeichnen, aber ich kann nicht herausfinden, wie ich sie schattieren kann.
Unten sehen Sie meinen Versuch, diesen Kreis zu schattieren, aber wie Sie sehen, wird er arc
in der xy
Ebene statt auf der yz
Ebene platziert.
Gibt es eine Möglichkeit, dies mithilfe der Tikz-Bibliothek zu umgehen 3d
? Gibt es eine Möglichkeit, dies mithilfe von zu umgehen tikz-3dplot
?
\documentclass{standalone}
\usepackage\[T1\]{fontenc}
\usepackage{fontspec}
\usepackage{tikz}
\usepackage{xcolor}
\usetikzlibrary{3d,calc,positioning}
\begin{document}
\begin{tikzpicture}\[z={(90:10mm)},x={(190:10mm)},y ={(-45:10mm)}\]
\def\circleplace{-2};
\def\circleSize{0.4}
\coordinate(coneTop) at (0,0,0);
\begin{scope}\[canvas is yz plane at x=\circleplace\]
\draw (0,0) circle (\circleSize);
\draw\[thick, dashed\] (135:\circleSize) arc \[start angle = 135, end angle = 315, radius=\circleSize\];
\end{scope}
\filldraw\[fill = red, fill opacity = 0.2\] (coneTop) -- (\circleplace,{\circleSize*cos(135)},{\circleSize*sin(135)}) arc \[start angle= 135, delta angle = 180, radius = 0.4\] -- cycle;
\draw\[dashed\] (\circleplace,{\circleSize*cos(135)},{\circleSize*sin(135)}) arc \[start angle= 135, delta angle = -180, radius = 0.4\];
\draw (coneTop) -- (\circleplace,{\circleSize*cos(135)},{\circleSize*sin(135)});
\draw (coneTop) -- (\circleplace,{\circleSize*cos(315)},{\circleSize*sin(315)});
\draw (1,0,0) -- ++(1,0,0) node\[anchor=south\]{$x$};
\draw (1,0,0) -- ++(0,1,0) node\[anchor=south\]{$y$};
\draw (1,0,0) -- ++(0,0,1) node\[anchor=south\]{$z$};
\end{tikzpicture}
\end{document}
Antwort1
Was Sie erreichen möchten, können Sie mithilfe symbolischer Koordinaten erreichen. Sie können auf diese innerhalb des Bereichs zugreifen, der Sie in die Ebene bringt.
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{3d}
\begin{document}
\begin{tikzpicture}[z={(90:10mm)},x={(190:10mm)},y ={(-45:10mm)},line cap=round,line join=round]
\path (0,0,0) coordinate (O) (1,0,0) coordinate (X);
\begin{scope}[canvas is yz plane at x=0]
\draw (O) -- (X) arc[start angle=0, end angle = 180, radius=1] -- cycle;
\end{scope}
\end{tikzpicture}
\end{document}
Beachten Sie, dass Sie die Koordinatensysteme in einem Pfad ändern können.
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{3d}
\begin{document}
\begin{tikzpicture}[z={(90:10mm)},x={(190:10mm)},y ={(-45:10mm)},line cap=round,line join=round]
\draw (0,0,0) -- ++(1,0,0) [canvas is yz plane at x=0]
arc[start angle=0, end angle = 180, radius=1] -- cycle;
\end{tikzpicture}
\end{document}
Es gibt Situationen, in denen Sie die Projektionen, die mit den Stilen der Bibliothek geliefert werden, nicht benötigen. 3d
In diesem Fall können Sie Ihre eigenen einrichten [yzplane]
, die in einen Pfad eingefügt werden können.
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{3d}
\begin{document}
\begin{tikzpicture}[z={(90:10mm)},x={(190:10mm)},y ={(-45:10mm)},line cap=round,line join=round]
\path[overlay] (0,0,0) coordinate (O) (1,0,0) coordinate (ex)
(0,1,0) coordinate (ey) (0,0,1) coordinate (ez);
\tikzset{yz plane/.style={x={(ey)},y={(ez)}}}
\draw (0,0,0) -- ++(1,0,0) [yz plane]
arc[start angle=0, end angle = 180, radius=1] -- cycle;
\end{tikzpicture}
\end{document}
Dies bedeutet, dass Sie bei Verwendung von beispielsweise innerhalb eines Pfades oder tikz-3dplot
einfügen können , um mitten im Pfad zu einem neuen Koordinatensystem zu wechseln.[tdplot_main_coords]
[tdplot_screen_coords]