傾斜平面作為瞄準鏡

傾斜平面作為瞄準鏡

我正在嘗試使用 TikZ 重建以下 3D 圖形。不需要完全相似,我實際上決定稍微改變幾何形狀和样式,以增加(令人困惑的)幾何情況的清晰度,但我遇到了問題。自旋圖(原始)

這是我對實現這一目標的看法。

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

它看起來是這樣的:

旋轉圖(新)

仍然存在的主要圖形問題是arc描繪角度的 s\theta_1不在\theta_2各自的平面(紅色和藍色)內。我擺弄了arc定義,但沒能使其發揮作用。

在這種情況下,另一個更美觀的問題是程式碼有點笨拙。我已盡最大努力使其看起來盡可能漂亮,但所有這些角度計算確實很難閱讀。

我最想要的解決方案是分別定義紅色和藍色平面的範圍,這將允許更優雅地定義點,並且還為兩個有問題的問題提供一個簡單的解決方法arc,但我不知道如何傾斜平面定義為範圍。

有人可以幫我嗎?

此外,非常歡迎任何關於如何提高描述清晰度並使圖片更容易理解的建議。

PS:對於對這張圖片所代表的內容感興趣的人:它用於定義大型強子對撞機質子-質子碰撞中的角度變量,用於測量希格斯玻色子。標記的點X是產生希格斯玻色子的碰撞點,Z_1/ V_1( Z_2/ V_2) 是希格斯玻色子的初級衰變產物,e^+​​ /e^-\mu^+/\mu^-是次級衰變產物。現實世界的幾何尺度是飛米量級。

答案1

在給這個問題一些時間和思考並在 stackoverflow 上進行比我願意承認的更多的挖掘之後,我想出了一個解決方案。

其主要成分是以下問題的答案:這個問題,它為我提供了執行實際座標變換的方法。

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

結果如下:

螺旋角

唯一剩下的問題是 - 我無法理解這是從哪裡來的 - 圖片縮放通過scale=X某種方式表現得很奇怪,並且似乎對不同尺寸的影響不同 - 例如,將 的輸出scale=1與 的輸出進行比較scale=2

相關內容