planos inclinados como miras

planos inclinados como miras

Estoy intentando reconstruir el siguiente gráfico 3D con TikZ. No se requiere una semejanza exacta y, de hecho, he decidido cambiar un poco la geometría y el estilo para aumentar la claridad de la (confusa) situación geométrica, pero me he encontrado con problemas.Diagrama de giro (original)

Esta es mi opinión para lograrlo.

\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}

Así es como se ve:

Diagrama de giro (nuevo)

El principal problema gráfico que aún queda es que las arcs que representan los ángulos \theta_1no \theta_2están dentro de sus respectivos planos (rojo y azul). He jugueteado con las arcdefiniciones, pero no logré hacerlo funcionar.

El otro problema de carácter más estético en este caso es que el código es un poco torpe. He hecho todo lo posible para que se vea lo mejor posible, pero todos esos cálculos angulares son realmente difíciles de leer.

La solución que más me gustaría sería definir ámbitos para los planos rojo y azul cada uno, lo que permitiría definir los puntos de manera mucho más elegante y también proporcionaría una salida fácil para los dos problemas arc, pero no puedo entender cómo. para definir planos inclinados como alcances.

¿Puede alguien ayudarme?

Además, cualquier sugerencia sobre cómo aumentar la claridad de la descripción y hacer que la imagen sea más fácilmente comprensible es bienvenida.

PD: Para las personas interesadas en lo que representa esta imagen: se usa para definir variables angulares en colisiones protón-protón en el LHC que se usan para medir los bosones de Higgs. El punto marcado Xes el punto de colisión en el que se produce el bosón de Higgs, Z_1/ V_1( Z_2/ V_2) son los productos de desintegración primarios del bosón de Higgs, y e^+/ e^-y \mu^+/ \mu^-son los productos de desintegración secundarios. La escala de la geometría en el mundo real es del orden de femtómetros.

Respuesta1

Después de dedicar un poco de tiempo y pensamiento al problema y de investigar en stackoverflow más de lo que estoy dispuesto a admitir, se me ocurrió una solución.

El ingrediente principal para esto fue la respuesta aesta pregunta, lo que me proporcionó los medios para realizar una transformación 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}

Así es como se ve el resultado:

ángulos de helicidad

El único problema que queda es, y no puedo entender de dónde viene, que la escala de la imagen scale=Xse comporta de alguna manera de manera extraña y parece afectar las diferentes dimensiones de manera diferente; compare, por ejemplo, la salida de scale=1con la salida de scale=2.

información relacionada