Seguir o código LaTeX produz uma pequena imagem com instruções.
\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}
No entanto, gostaria de traçar duas linhas com um ângulo para baixo a partirb. Meu problema é que não sei como posso pegar a posição/nó da setabpara desenhar uma linha reta para baixo. Naturalmente, posso usar coordenadas (até obter a correta), mas acho que existe uma solução melhor para capturar este ponto/posição/nó.
Eu gostaria de alcançar a seguinte imagem.
Você sabe como posso receber a ponta da flecha dobdesenhar as linhas restantes?
Responder1
Você deve usar 3d
coordenadas:
Código:
\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}
Responder2
Você está tentando resolver um problema de geometria 3D usando coordenadas 2D (tela). Isso não pode ser feito. Não há como determinar em que plano (b) deveria estar apenas dadas as coordenadas da tela.
A seguir está minha melhor aproximação do mwe usando coordenadas 3D. Meus palpites estão em azul.
\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}
Responder3
Para esse tipo de desenho eu costumo usar o tikz-3dplot
pacote que oferece bons recursos 3D/perspectiva. Torna mais fácil desenhar a projeção de um pontoambosno quadro de referência principaleno referencial girado.
O comando útil neste caso é \tdplotsetcoord
, usado como
\tdplotsetcoord{<name>}{<r>}{<theta>}{<phi>}
e que define um ponto TikZ nomeado <name>
cujas coordenadas esféricas polares são ( <r>
, <theta>
, <phi>
). Além disso, este comando define a projeção do ponto <name>
nos eixos do referencial ( <name>x
, <name>y
e <name>z
) e nos planos ( <name>xy
, <name>xz
, <name>yz
). Assim, você pode acessar essas projeções sem calcular manualmente suas coordenadas.
Observação:o \tdplotsetmaincoords
comando define a perspectiva através da qual o 3D é renderizado (basicamente define a aparência do quadro de referência principal). O comando \tdplotsetrotatedcoords
define um novo referencial obtido do principal através de um conjunto preciso de rotações (ângulos de Euler).
\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}