geneigte Ebenen als Zielfernrohr

geneigte Ebenen als Zielfernrohr

Ich versuche, die folgende 3D-Grafik mit TikZ nachzubilden. Eine genaue Ähnlichkeit ist nicht erforderlich, und ich habe mich tatsächlich dazu entschlossen, die Geometrie und den Stil ein wenig zu ändern, um die Klarheit der (verwirrenden) geometrischen Situation zu erhöhen, aber ich bin auf Probleme gestoßen.Spin-Diagramm (Original)

Hier ist mein Ansatz, um dies zu erreichen.

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

So sieht es aus:

Spin-Diagramm (neu)

Das größte grafische Problem, das noch besteht, ist, dass die arcWinkel \theta_1und \theta_2nicht innerhalb ihrer jeweiligen Ebenen (rot und blau) liegen. Ich habe mit den Definitionen herumgespielt arc, aber es hat nicht geklappt.

Das andere Problem ästhetischer Natur ist in diesem Fall, dass der Code etwas schwerfällig ist. Ich habe mein Bestes getan, um ihn so schön wie möglich aussehen zu lassen, aber all diese Winkelberechnungen sind wirklich schwer zu lesen.

Die Lösung, die mir am besten gefallen würde, wäre, jeweils Bereiche für die rote und blaue Ebene zu definieren. Dadurch ließen sich die Punkte viel eleganter definieren und es würde auch einen einfachen Ausweg für die beiden problematischen arcs bieten. Ich komme aber nicht dahinter, wie man geneigte Ebenen als Bereiche definiert.

Kann mir jemand helfen?

Darüber hinaus sind Anregungen, wie die Darstellung übersichtlicher und das Bild verständlicher gemacht werden kann, herzlich willkommen.

PS: Für alle, die wissen möchten, was dieses Bild darstellt: Es wird verwendet, um Winkelvariablen bei Proton-Proton-Kollisionen am LHC zu definieren, die zur Messung von Higgs-Bosonen verwendet werden. Der markierte Punkt Xist der Kollisionspunkt, an dem das Higgs-Boson erzeugt wird, Z_1/ V_1( Z_2/ V_2) sind die primären Zerfallsprodukte des Higgs-Bosons und e^+/ e^-und \mu^+/ \mu^-sind die sekundären Zerfallsprodukte. Der reale Maßstab der Geometrie liegt in der Größenordnung von Femtometern.

Antwort1

Nachdem ich mir etwas Zeit genommen und über das Problem nachgedacht und mehr auf Stackoverflow herumgestöbert habe, als ich zugeben möchte, bin ich auf eine Lösung gekommen.

Die wichtigste Zutat hierfür war die Antwort aufdiese Frage, wodurch ich die Möglichkeit hatte, eine tatsächliche Koordinatentransformation durchzuführen.

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

So sieht das Ergebnis aus:

Helizitätswinkel

Das einzige verbleibende Problem ist – und ich kann nicht verstehen, woher das kommt –, dass sich die Bildskalierung über scale=Xirgendwie seltsam verhält und die verschiedenen Dimensionen unterschiedlich zu beeinflussen scheint – vergleichen Sie beispielsweise die Ausgabe von scale=1mit der Ausgabe von scale=2.

verwandte Informationen