如何延长有角度的线?

如何延长有角度的线?

用文字表达就是,我想要做的是:“将三条绿线从其指定的原点以指定的角度延伸到与蓝线相交”你建议如何做到这一点?

\def \tubeLength{10}
\def \lightLength{5}
\def \angleDown{340}
\def \lightSpacing{1}

\begin{document}
\begin{tikzpicture}[scale=.5]

% tube
\draw (0,0) -- (\angleDown:\tubeLength);
\draw (0,0) ++(\angleDown-270:4*\lightSpacing) -- ++(\angleDown:\tubeLength);

% diffracted light
\foreach \y in {\lightSpacing, 2*\lightSpacing, 3*\lightSpacing}
  \draw[green] (0,\y) -- ++(\angleDown:\lightLength);

% lense center line
\path (0,0) -- (\angleDown:\lightLength) coordinate (A)
  node[below left] {A};
\path [draw, very thick, blue] (A) -- ++(\angleDown-270:4*\lightSpacing)
  coordinate (B)
  node[above right,black] {B};

\end{tikzpicture}

在此处输入图片描述

答案1

如果你使用了tikzcalc,那么你可以写

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

\def \tubeLength{10}
\def \lightLength{5}
\def \angleDown{340}
\def \lightSpacing{1}

\begin{tikzpicture}

  % tube
  \draw (0,0) -- (\angleDown:\tubeLength);
  \draw (0,0) ++(\angleDown-270:4*\lightSpacing) -- ++(\angleDown:\tubeLength);

  % lense center line
  \path (0,0) -- (\angleDown:\lightLength) coordinate (A) node[below left] {A};
  \path [draw, very thick, blue] (A) -- ++(\angleDown-270:4*\lightSpacing) coordinate (B) node[above right,black] {B};

  % diffracted light
  \foreach \y/\x in {\lightSpacing/1, 2*\lightSpacing/2, 3*\lightSpacing/3}
    {
      \coordinate (DL\x) at (0,\y);
      \draw[green] (DL\x)  -- ($(A)!(DL\x)!(B)$);
    }

\end{tikzpicture}

\end{document}

在此处输入图片描述

该语法($<coordinate>!<projection coordinate>!<angle>:<second coordinate>$)将为您提供给定点到所需线的投影。

答案2

如果您只是旋转坐标系,则\angleDown除了删除之外,不需要对代码进行任何更改\angleDown

不过,我\def尽可能简单地删除了 s 。
您可以通过更改PGF/TikZ 的向量来调整tubeLength和,默认值为。将其设置为,将使长 20cm , 长10cm (至少没有)。lightLengthyy=1cmy=2cmtubeLengthlightLengthscale

代码

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[scale=.5, rotate=340, every label/.append style={black}]
\def\lightLength{5}
% tube
\draw    (0,0) -- ++ (right:10) coordinate (tubeLength);
\draw (-270:4) -- ++ (tubeLength);
% diffracted light
\foreach \y in {1,...,3} \draw[green] (0,\y) -- ++(right:\lightLength);
% lense center line
\path (right:\lightLength)                     coordinate[label=below left:A]  (A);
\path [draw, very thick, blue] (A) -- ++(up:4) coordinate[label=above right:B] (B);
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

答案3

($ (A)!0.25!(B) $)使用 PSTricks 的解决方案。不幸的是, PSTricks 中没有类似语法,因此temp需要作为辅助节点。

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-eucl}
\begin{document}
\begin{pspicture}[showgrid](8,8)
    \pstGeonode[PosAngle={-90,90},CurveType=polyline,linecolor=blue](3,1){A}(5,6){B}
    \psline([offset=2]{A}B)([offset=-2]{A}B)
    \psline([offset=2]{B}A)([offset=-2]{B}A)
    \multido{\n=.25+.25}{3}{%
        \nodexn{\n(B)-\n(A)+(A)}{temp}
        \psline[linecolor=green]([offset=3]{B}temp)(temp)
    }
\end{pspicture}
\end{document}

在此处输入图片描述

相关内容