planos inclinados como escopos

planos inclinados como escopos

Estou tentando reconstruir o seguinte gráfico 3D com TikZ. A semelhança exata não é necessária e, na verdade, decidi mudar um pouco a geometria e o estilo para aumentar a clareza da (confusa) situação geométrica, mas tive problemas.Diagrama de rotação (original)

Aqui está minha opinião sobre como fazer isso acontecer.

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,3d,positioning}

\begin{document}
\begingroup
\pgfmathsetmacro{\PHIONE}{15}
\pgfmathsetmacro{\PHI}{45}
\pgfmathsetmacro{\THETAONE}{50}
\pgfmathsetmacro{\LLONE}{.5}
\pgfmathsetmacro{\LVONE}{.6}
\pgfmathsetmacro{\THETATWO}{50}
\pgfmathsetmacro{\LLTWO}{.5}
\pgfmathsetmacro{\LVTWO}{.6}

\begin{tikzpicture}[node distance=3.5mm,x={(0.866cm,0.5cm)}, y={(-0.866cm,0.5cm)}, z={(0cm,1cm)}, scale=2]
  \coordinate [at={(0,0,0)}] (O);
  \coordinate [at={(1.2,-1.2,0)}] (P1);
  \coordinate [at={(-1.2,1.2,0)}] (P2);
  \coordinate [at={(1,{-cos(\PHIONE)},{-sin(\PHIONE)})}] (refPHIONE);
  \coordinate [at={(-1,{-cos(\PHI+\PHIONE)},{-sin(\PHI+\PHIONE)})}] (refPHI);
  \coordinate [at={(1,-1,0)}] (refP1);
  \coordinate [at={(1,0,0)}] (V1dir);
  \coordinate [at={(\LVONE,0,0)}] (V1);
  \coordinate [at={({\LVONE+\LLONE *cos(\THETAONE)},{\LLONE *sin(\THETAONE)*-cos(\PHIONE)},{\LLONE *sin(\THETAONE)*-sin(\PHIONE)})}] (l1a);
  \coordinate [at={({\LVONE-\LLONE *cos(\THETAONE)},{\LLONE *sin(\THETAONE)* cos(\PHIONE)},{\LLONE *sin(\THETAONE)* sin(\PHIONE)})}] (l1b);
  \coordinate [at={(-\LVTWO,0,0)}] (V2);
  \coordinate [at={({-\LVTWO+\LLTWO *cos(\THETATWO)},{\LLTWO *sin(\THETATWO)*-cos(\PHI+\PHIONE)},{\LLTWO *sin(\THETATWO)*-sin(\PHI+\PHIONE)})}] (l2a);
  \coordinate [at={({-\LVTWO-\LLTWO *cos(\THETATWO)},{\LLTWO *sin(\THETATWO)* cos(\PHI+\PHIONE)},{\LLTWO *sin(\THETATWO)* sin(\PHI+\PHIONE)})}] (l2b);
  \draw[-,dashed] (O) -- (V1dir) -- (refP1) -- cycle;
  \draw[-,blue,dashed] (refPHIONE) -- (1,{cos(\PHIONE)},{sin(\PHIONE)}) -- (0,{cos(\PHIONE)},{sin(\PHIONE)}) -- (0,{-cos(\PHIONE)},{-sin(\PHIONE)}) -- cycle;
  \begin{scope}[canvas is yz plane at x=1]
    \draw[->] (-1,0) arc(0:\PHIONE:-1) node[midway,right] {$\Phi_1$}; 
  \end{scope}
  \draw[-,red,dashed] (refPHI) -- (-1,{cos(\PHI+\PHIONE)},{sin(\PHI+\PHIONE)}) -- (0,{cos(\PHI+\PHIONE)},{sin(\PHI+\PHIONE)}) -- (0,{-cos(\PHI+\PHIONE)},{-sin(\PHI+\PHIONE)}) -- cycle;
  \begin{scope}[canvas is yz plane at x=0]
    \draw[->] ({-cos(\PHIONE)},{-sin(\PHIONE)}) arc(\PHIONE:\PHI+\PHIONE:-1) node[midway,right] {$\Phi$}; 
  \end{scope}
  \draw[->,thick,shorten >=2mm] (P1) -- (O);
  \draw[->,thick,shorten >=2mm] (P2) -- (O);
  \draw[->] (O) -- (1.5,0,0);
  \draw[->] (O) -- (-1.5,0,0);
  \draw[->,thick,blue] (O) -- (V1);
  \draw[->,blue] (V1) -- (l1a);
  \draw[->,blue] (V1) -- (l1b);
  \draw[->,thick,red] (O) -- (V2);
  \draw[->,red] (V2) -- (l2a);
  \draw[->,red] (V2) -- (l2b);
  \node[above of = V1] {$V_1$};
  \node[below of = V2] {$V_2$};
  \node[right of = P1] {$p$};
  \node[left of = P2] {$p$};
  \draw[->] (0.25,0) arc (0:-45:0.25) node[midway,above right=-2mm and 0mm] {$\theta^*$};
  \draw[->] (V1) ++ (.25,0,0)  arc (0:-\THETAONE:.25) node[midway,above right=-2mm and 0mm] {$\theta_1$}; % this should be located in the blue plane
  \draw[->] (V2) ++ (.25,0,0) arc (0:-\THETATWO:.25) node[midway,above right=-2mm and 0mm] {$\theta_2$}; % this should be located in the red plane
\end{tikzpicture}
\endgroup

\end{document}

Aqui está o que parece:

Diagrama de rotação (novo)

O principal problema gráfico que ainda resta é que os arcs representam os ângulos \theta_1e \theta_2não estão dentro dos seus respectivos planos (vermelho e azul). Eu brinquei com as arcdefinições, mas não consegui fazer funcionar.

O outro problema de natureza mais estética neste caso é que o código é um pouco desajeitado. Fiz o meu melhor para que parecesse o mais bonito possível, mas todos aqueles cálculos angulares são realmente difíceis de ler.

A solução que eu mais gostaria seria definir escopos para os planos vermelho e azul cada, o que permitiria definir os pontos com muito mais elegância e também forneceria uma saída fácil para os dois problemas problemáticos arc, mas não consigo descobrir como para definir planos inclinados como escopos.

Alguém pode me ajudar?

Além disso, qualquer sugestão sobre como aumentar a clareza da representação e tornar a imagem mais facilmente compreensível é muito bem-vinda.

PS: Para pessoas interessadas no que esta imagem representa: Ela é usada para definir variáveis ​​angulares em colisões próton-próton no LHC que são usadas para medir bósons de Higgs. O ponto marcado Xé o ponto de colisão no qual o bóson de Higgs é produzido, Z_1/ V_1( Z_2/ V_2) são os produtos primários do decaimento do bóson de Higgs e e^+/ e^-e \mu^+/ \mu^-são os produtos secundários do decaimento. A escala da geometria do mundo real é da ordem dos femtômetros.

Responder1

Depois de dedicar um pouco de tempo e reflexão ao problema e pesquisar no stackoverflow mais do que estou disposto a admitir, encontrei uma solução.

O ingrediente principal para isso foi a resposta aessa questão, o que me forneceu os meios para realizar uma transformação de coordenadas real.

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,3d,positioning}

\tikzset{RPY/.code args={#1,#2,#3}{
    % roll, pitch, yaw
    \pgfmathsetmacro{\rollangle}{#1}%
    \pgfmathsetmacro{\pitchangle}{#2}%
    \pgfmathsetmacro{\yawangle}{#3}%
    % to what vector is the x unit vector transformed, and which 2D vector is this?
    \pgfmathsetmacro{\newxx}{cos(\yawangle)*cos(\pitchangle)}
    \pgfmathsetmacro{\newxy}{sin(\yawangle)*cos(\pitchangle)}
    \pgfmathsetmacro{\newxz}{-sin(\pitchangle)}
    \path (\newxx,\newxy,\newxz);
    \pgfgetlastxy{\nxx}{\nxy};
    % to what vector is the y unit vector transformed, and which 2D vector is this?
    \pgfmathsetmacro{\newyx}{cos(\yawangle)*sin(\pitchangle)*sin(\rollangle)-sin(\yawangle)*cos(\rollangle)}
    \pgfmathsetmacro{\newyy}{sin(\yawangle)*sin(\pitchangle)*sin(\rollangle)+ cos(\yawangle)*cos(\rollangle)}
    \pgfmathsetmacro{\newyz}{cos(\pitchangle)*sin(\rollangle)}
    \path (\newyx,\newyy,\newyz);
    \pgfgetlastxy{\nyx}{\nyy};
    % to what vector is the z unit vector transformed, and which 2D vector is this?
    \pgfmathsetmacro{\newzx}{cos(\yawangle)*sin(\pitchangle)*cos(\rollangle)+ sin(\yawangle)*sin(\rollangle)}
    \pgfmathsetmacro{\newzy}{sin(\yawangle)*sin(\pitchangle)*cos(\rollangle)-cos(\yawangle)*sin(\rollangle)}
    \pgfmathsetmacro{\newzz}{cos(\pitchangle)*cos(\rollangle)}
    \path (\newzx,\newzy,\newzz);
    \pgfgetlastxy{\nzx}{\nzy};
    \pgfkeysalso{%
      /tikz/x={(\nxx,\nxy)},
      /tikz/y={(\nyx,\nyy)},
      /tikz/z={(\nzx,\nzy)}
    }
  }
}


\begin{document}
\begingroup
\pgfmathsetmacro{\PHIONE}{15}
\pgfmathsetmacro{\PHI}{45}
\pgfmathsetmacro{\THETAONE}{45}
\pgfmathsetmacro{\LLONE}{.3}
\pgfmathsetmacro{\LVONE}{.4}
\pgfmathsetmacro{\THETATWO}{80}
\pgfmathsetmacro{\LLTWO}{.5}
\pgfmathsetmacro{\LVTWO}{.6}

\tikzset{angle/.style={->,shorten >=1pt,shorten <=1pt}}

\begin{tikzpicture}[node distance=.5em,x={(1.414cm,1cm)}, y={(-1.414cm,1cm)}, z={(0cm,2cm)},scale=1]
  %% common definitions
  \coordinate [at={(0,0,0)}] (O);
  \coordinate [at={(1.2,-1.2,0)}] (P1);
  \coordinate [at={(-1.2,1.2,0)}] (P2);
  \draw[->,thick,shorten >=2mm] (P1) -- (O);
  \draw[->,thick,shorten >=2mm] (P2) -- (O);
  \draw[->] (O) -- (1.5,0,0);
  \draw[->] (O) -- (-1.5,0,0);
  \coordinate [at={(1,-1,0)}] (refP1);
  %%% draw the blue part
  \begin{scope}[RPY={\PHIONE,0,0}] %% blue plane
    \coordinate [at={(1,-1,0)}] (refPHIONE);
    \coordinate [at={(1,0,0)}] (V1dir);
    \coordinate [at={(\LVONE,0,0)}] (V1);
    \draw[->,thick,blue] (O) -- (V1);
    \draw[-,blue,dashed] (refPHIONE) -- (1,1,0) -- (0,1,0) -- (0,-1,0) -- cycle;
    \draw[angle] (V1) ++ (.25,0,0)  arc (0:-\THETAONE:.25) node[midway,above right=-2mm and 0mm] {$\theta_1$};
    \begin{scope}[RPY={0,0,-\THETAONE},shift=(V1)] %% blue plane (rotated to decay products)
      \coordinate [at={(\LLONE,0,0)}] (l1a);
      \coordinate [at={(-\LLONE,0,0)}] (l1b);
      \draw[->,blue] (V1) -- (l1a);
      \draw[->,blue] (V1) -- (l1b);
    \end{scope}
  \end{scope}
  %%% draw the red part
  \begin{scope}[RPY={\PHI+\PHIONE,0,0}] %% red plane
    \coordinate [at={(-1,-1,0)}] (refPHI);
    \coordinate [at={(-1,0,0)}] (V2dir);
    \coordinate [at={(-\LVTWO,0,0)}] (V2);
    \draw[->,thick,red] (O) -- (V2);
    \draw[-,red,dashed] (refPHI) -- (-1,1,0) -- (0,1,0) -- (0,-1,0) -- cycle;
    \draw[angle] (V2) ++ (.25,0,0) arc (0:-\THETATWO:.25) node[midway,above right=-2mm and 0mm] {$\theta_2$};
    \begin{scope}[RPY={0,0,-\THETATWO},shift=(V2)] %% red plane (rotated to decay products)
      \coordinate [at={(\LLTWO,0,0)}] (l2a);
      \coordinate [at={(-\LLTWO,0,0)}] (l2b);
      \draw[->,red] (V2) -- (l2a);
      \draw[->,red] (V2) -- (l2b);
    \end{scope}
  \end{scope}
  %% relative angles
  \draw[-,dashed] (O) -- (V1dir) -- (refP1) -- cycle;
  \begin{scope}[canvas is yz plane at x=1]
    \draw[angle] (-1,0) arc(0:\PHIONE:-1) node[midway,right] {$\Phi_1$}; 
  \end{scope}
  \begin{scope}[canvas is yz plane at x=0]
    \draw[angle] ({-cos(\PHIONE)},{-sin(\PHIONE)}) arc(\PHIONE:\PHI+\PHIONE:-1) node[midway,right] {$\Phi$}; 
  \end{scope}
  \draw[angle] (0.25,0) arc (0:-45:0.25) node[midway,above right=-2mm and 0mm] {$\theta^*$};
  %% labels
  \node[above = of V1] {$V_1$};
  \node[below = of V2] {$V_2$};
  \node[right = of P1] {$p$};
  \node[left  = of P2] {$p$};
\end{tikzpicture}
\endgroup

\end{document}

O resultado é assim:

ângulos de helicidade

O único problema restante é - e não consigo entender de onde isso vem - que o dimensionamento da imagem via scale=Xde alguma forma se comporta de maneira estranha e parece afetar as diferentes dimensões de maneira diferente - compare, por exemplo, a saída de scale=1com a saída de scale=2.

informação relacionada