TikZ: Position/Knoten einer Pfeilspitze abrufen

TikZ: Position/Knoten einer Pfeilspitze abrufen

Durch Befolgen des LaTeX-Codes wird ein kleines Bild mit Anweisungen erstellt.

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{quotes,angles}
\begin{document}

\begin{tikzpicture}[thick]
  % X',Y',Z' in black
  \draw[->]           (0,0) -- (0,4)  node[right, text width=5em] {$Z'$};
  \draw[->]           (0,0) -- (4,0)  node[right, text width=5em] {$Y'$};
  \draw[->,rotate=45] (0,0) -- (-4,0) node[right, text width=5em] {$X'$};

  % X,Y,Z in red
  \draw[->,rotate=20,draw=red](0,0) -- (0,4)  node[right, text width=5em] {$Z$};
  \draw[->,rotate=20,draw=red](0,0) -- (4,0)  node[right, text width=5em] {$Y$};
  \draw[->,rotate=65,draw=red](0,0) -- (-4,0) node[right, text width=5em] {$X$};

  % a and b small
  \draw[->]           (0,0) -- (0,2.5)  node[right, text width=5em] (a) {$a$};
  \draw[->,rotate=-27.5](0,0) -- (0,2)  node[right, text width=5em] (b) {$b$};
\end{tikzpicture}

\end{document}

Ausgabe

Ich möchte jedoch zwei Linien mit einem Winkel nach unten zeichnenB. Mein Problem ist, dass ich nicht weiß, wie ich die Pfeilposition/den Knotenpunkt vonBum eine gerade Linie nach unten zu zeichnen. Natürlich kann ich Koordinaten verwenden (bis ich die richtigen habe), aber ich denke, es gibt eine bessere Lösung, um diesen Punkt/diese Position/diesen Knoten aufzunehmen.

Ich möchte folgendes Bild erzielen.

Leistung

Weißt du, wie ich die Spitze des Pfeils empfangen kann?Bum die restlichen Linien zu zeichnen?

Antwort1

Sie sollten 3dKoordinaten verwenden:

Bildbeschreibung hier eingeben

Code:

\documentclass[border=2pt]{standalone}

\usepackage{tikz}

\newcommand*{\HorizontalAxis}{Y}%
\newcommand*{\VerticalAxis}{Z}%
\newcommand*{\ObliqueAxis}{X}%

\begin{document}
\begin{tikzpicture}[thick]
  % X',Y',Z' in black
  \draw[-latex] (0,0,0) -- (0,0,4)  node[right, text width=5em] {$\ObliqueAxis'$};
  \draw[-latex] (0,0,0) -- (4,0,0)  node[right, text width=5em] {$\HorizontalAxis'$};
  \draw[-latex] (0,0,0) -- (0,4,0)  node[right, text width=5em] {$\VerticalAxis'$};
  
  % X,Y,Z in red
  \begin{scope}[rotate=20,draw=red]
      \draw[->] (0,0,0) -- (0,0,4)  node[right, text width=5em] {$\ObliqueAxis$};
      \draw[->] (0,0,0) -- (4,0,0)  node[right, text width=5em] {$\HorizontalAxis$};
      \draw[->] (0,0,0) -- (0,4,0)  node[right, text width=5em] {$\VerticalAxis$};
  \end{scope}
  
  % a and b small
  \draw[->] (0,0,0) -- (0,2.5,0)  node[right, text width=5em] (a) {$a$};
  \draw[->] (0,0,0) -- (1,2,1)    node[right, text width=5em] (b) {$b$};
  
  \draw [orange, dotted]
         (0,0,0) 
      -- (1,0,1) node [below, midway] {$u$}
      -- (1,2,1);
\end{tikzpicture}
\end{document}

Antwort2

Sie versuchen, ein Problem in 3D-Geometrie mit 2D-Koordinaten (Bildschirmkoordinaten) zu lösen. Das ist nicht möglich. Es gibt keine Möglichkeit, anhand der Bildschirmkoordinaten zu bestimmen, in welcher Ebene (b) sich befinden soll.

Das Folgende ist meine beste Annäherung an den MWE unter Verwendung von 3D-Koordinaten. Meine Schätzungen sind blau.

beste Annahme

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{quotes,angles}

\begin{document}
\begin{tikzpicture}[thick]
  % X',Y',Z' in black
  \draw[->] (0,0,0) -- (0,4,0) node[right, text width=5em] {$Z'$};
  \draw[->] (0,0,0) -- (4,0,0) node[right, text width=5em] {$Y'$};
  \draw[->] (0,0,0) -- (0,0,4) node[right, text width=5em] {$X'$};

  % X,Y,Z in red
  \draw[->,rotate=20,draw=red] (0,0,0) -- (0,4,0)  node[right, text width=5em] {$Z$};
  \draw[->,rotate=20,draw=red] (0,0,0) -- (4,0,0)  node[right, text width=5em] {$Y$};
  \draw[->,rotate=20,draw=red] (0,0,0) -- (0,0,4) node[right, text width=5em] {$X$};

  \draw[->,blue] (0,0,0) -- (0,{4*cos(30)},{4*sin(30)*cos(20)})  node[right, text width=5em] {$Z$};
  \draw[->,blue] (0,0,0) -- ({4*cos(20)},{4*sin(20)},0)  node[right, text width=5em] {$Y$};
  \draw[->,blue] (0,0,0) -- ({4*sin(10)},0,{4*cos(10)})  node[right, text width=5em] {$X$};

  % a and b small
  \coordinate (a) at (0,2.5,0);
  \draw[->] (0,0,0) -- (a)  node[right, text width=5em] {$a$};
  \draw[->,rotate=-27.5] (0,0,0) -- (0,2,0) node[right, text width=5em] {$b$};
  \coordinate (b) at ({2.5*sin(30)*sin(60)},{2.5*cos(30)},{2.5*sin(30)*cos(60)});
  \draw[->,blue] (0,0,0) --  (b) node[right, text width=5em] {$b$};
  \draw[->,yellow] (b) -- ({2.5*sin(30)*sin(60)},0,{2.5*sin(30)*cos(60)}) -- (0,0,0);
\end{tikzpicture}

\end{document}

Antwort3

Für diese Art von Zeichnungen verwende ich normalerweise das tikz-3dplotPaket, das gute 3D-/Perspektivfunktionen bietet. Es macht es einfach, die Projektion eines Punkts zu zeichnenbeideim HauptbezugsrahmenUndim gedrehten Referenzrahmen.

Der in diesem Fall nützliche Befehl ist \tdplotsetcoord, verwendet als

\tdplotsetcoord{<name>}{<r>}{<theta>}{<phi>}

und definiert einen TikZ-Punkt mit dem Namen , <name>dessen polare Kugelkoordinaten ( <r>, <theta>, <phi>) sind. Darüber hinaus definiert dieser Befehl die Projektion des Punkts <name>auf die Achsen des Referenzrahmens ( <name>x, <name>yund <name>z) und auf die Ebenen ( <name>xy, <name>xz, <name>yz). Sie können somit auf diese Projektionen zugreifen, ohne ihre Koordinaten manuell berechnen zu müssen.

Notiz:Der \tdplotsetmaincoordsBefehl legt die Perspektive fest, durch die das 3D gerendert wird (im Grunde legt er das Erscheinungsbild des Hauptreferenzrahmens fest). Der Befehl \tdplotsetrotatedcoordsdefiniert einen neuen Referenzrahmen, der durch eine präzise Reihe von Rotationen (Eulersche Winkel) aus dem Hauptrahmen gewonnen wird.

\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{60}{110}
\begin{tikzpicture}[tdplot_main_coords]
  \coordinate (O) at (0,0,0);
  \def\axislength{2.5}
  \draw [->] (O) -- (\axislength,0,0) node [left] {$x$};
  \draw [->] (O) -- (0,\axislength,0) node [right] {$y$};
  \draw [->] (O) -- (0,0,\axislength) node [right] {$z$};
  \def\rvec{2}
  \def\phivec{60}
  \def\thetavec{30}
  \tdplotsetcoord{P}{\rvec}{\thetavec}{\phivec}% define a point through its spherical coordinates (r,theta,phi)
  \draw [->,dashed] (O) -- (P) node [above] {$P$};
  \draw [dashed,black!25] (O) -- (Pxy) -- (P);% access projection of P on the xy-plane though point Pxy defined by \tdplotsetcoord

  \tdplotsetrotatedcoords{30}{20}{0}
  \begin{scope}[tdplot_rotated_coords,red]% same as before but in the rotated frame
    \draw [->] (O) -- (\axislength,0,0) node [left] {$x'$};
    \draw [->] (O) -- (0,\axislength,0) node [right] {$y'$};
    \draw [->] (O) -- (0,0,\axislength) node [right] {$z'$};
    \tdplotsetcoord{Q}{\rvec}{\thetavec}{\phivec}
    \draw [->,dashed] (O) -- (Q) node [right] {$Q$};
    \draw [dashed,red!25] (O) -- (Qxy) -- (Q);
  \end{scope}
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen