
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
평면에 대한 쉬운 방법도 제공할 수 있지만 어떻게 해야 할지 알 수 없습니다. 기울어진 평면을 범위로 정의합니다.
누군가 나를 도와줄 수 있나요?
또한 묘사의 선명도를 높이고 그림을 더 쉽게 이해할 수 있는 방법에 대한 제안도 환영합니다.
추신: 이 사진이 무엇을 나타내는지 관심이 있는 사람들을 위해: 힉스 보손을 측정하는 데 사용되는 LHC의 양성자-양성자 충돌에서 각도 변수를 정의하는 데 사용됩니다. 표시된 지점 X
은 힉스 보존이 생성되는 충돌 지점이며, Z_1
/ V_1
( Z_2
/ V_2
)는 힉스 보존의 1차 붕괴 생성물, e^+
/ e^-
및 \mu^+
/ \mu^-
는 2차 붕괴 생성물입니다. 기하학의 실제 규모는 펨토미터 정도입니다.
답변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
.