用文字表达就是,我想要做的是:“将三条绿线从其指定的原点以指定的角度延伸到与蓝线相交”你建议如何做到这一点?
\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
如果你使用了tikz
库calc
,那么你可以写
\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 (至少没有)。lightLength
y
y=1cm
y=2cm
tubeLength
lightLength
scale
代码
\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}