如何评估角度

如何评估角度

是否可以在 Tikz 中评估角度?我在 Google 上搜索了很多,但找不到任何有用的方法。我的问题如下:我有一个圆弧与一束平行线相交,就像下图中的 Shawn 一样

在此处输入图片描述

一旦绘制了弧线(路径名=镜像),我就使用了这个代码

\foreach \y in {-1.6,-0.8,...,1.6}
                {
                    \path [name path=ray] (-1,\y) -- ($ (-1,\y) + (10,0) $);
                    \path [name intersections={of=ray and mirror, by={P}}];
                    \draw [thick, postaction={on each segment={mid arrow=black}}] (-1,\y) -- (P);
                    \draw [thick, dashed, name path=refracted] (P) -- (F);

                    \begin{scope}[shift={(P)}]

                    \end{scope}                     
                }

生成线束。我想用红色画一些这样的线

在此处输入图片描述

为了做到这一点,我想评估 P-F-V 之间的角度,并在 P 中的坐标系移动后(每条线都会改变),然后使用

\draw [thick] (\myAngle:2cm);

答案1

您要求的计算比上一个答案因为光线都是水平的。你只需要得到它们击中镜子的角度 alpha,出射光线的角度就是 180-2*alpha。这个角度可以用语法calc计算

\path let \p1=($(<point>)-(<center>)$),
    \n1={180-atan2(\y1,\x1)} in ... ;

其中是射线照射镜子的点,即代码中的<point>交点,是用于绘制镜子的圆心。以下独立代码说明了这一点。P<center>

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{decorations.markings,calc,angles,quotes}
\pgfdeclareradialshading{halo}{\pgfpointorigin}{
  color(0pt)=(pgftransparent!100); color(22.5bp)=(pgftransparent!100);
  color(25bp)=(pgftransparent!00); color(50bp)=(pgftransparent!00)}%
\pgfdeclarefading{halo}{\pgfuseshading{halo}}%
\tikzset{->-/.style={decoration={% https://tex.stackexchange.com/a/39282/194703
  markings,
  mark=at position #1 with {\arrow{>}}},postaction={decorate}},
  ->-/.default=0.5}
\begin{document}
\begin{tikzpicture}[>=stealth,every label/.append style={black},
    bullet/.style={circle,fill=black,inner sep=0.1em}]
\begin{scope}[xshift=6cm]
    \clip (75:-3)
    -- (75:-2.5) arc (75:-75:-2.5)
    -- (-75:-3) arc (-75:75:-3);
    \fill[path fading=halo] (0,0) circle[radius=3cm];
\end{scope}
\draw (-2,0) coordinate (L) -- (7,0) coordinate (R) 
  (3,0)  node[bullet,label=below left:$V$](V){}
  (6,0)  node[bullet,label=below:$C$](C){}
  (-1,0)  node[bullet,label=below:$O$](O){}
  foreach \X [count=\Y] in {-40,-20,20,40}
  {($(C)+(180+\X:3)$) node[bullet](P\Y){}};
  \foreach \Y in {1,...,4}
  {\draw[orange,->-,thick] (O|-P\Y) -- (P\Y);
   \draw[red,->-,thick] let \p1=($(P\Y)-(C)$),
    \n1={180-atan2(\y1,\x1)} in
    (P\Y) -- ++({180-2*\n1}:2);
   \draw[dashed, shorten >=-2cm] (C) -- (P\Y);}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容