我正在尝试使用 TikZ 绘制应力分布。它应该如下图所示:
到目前为止,我刚刚完成三角分布:
\documentclass{article}
\usepackage{tikz}
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{center}
\setlength\PreviewBorder{10pt}
\begin{document}
\begin{center}
\begin{tikzpicture}
\draw (-0.2,0) -- ++(0,4);
\foreach \i in {0.5,0.75,...,4} {
\draw[-latex] (-2*\i/4-0.2,\i) -- (-0.2,\i);
}
\draw (-0.2,0) -- ++(-2,4);
\end{tikzpicture} %
\end{center}
\end{document}
我需要代码方面的帮助。
答案1
你的方法很好,唯一的小挑战是抑制箭头太短的区域。使用一些max
技巧min
,你可以在屏幕截图的右侧绘制形状。以下是两个示例。
\documentclass{article}
\usepackage{tikz}
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{center}
\setlength\PreviewBorder{10pt}
\begin{document}
\begin{center}
\begin{tikzpicture}
\draw (-1,0) -- ++(0,4);
\foreach \i in {0.25,0.5,...,4} {
\pgfmathtruncatemacro{\Sign}{sign(int(4*(-0.8+2*\i/4)))}
\ifnum\Sign=0
\else
\draw[latex-] (-2*\i/4-0.2,\i) -- (-1,\i);
\fi
}
\draw (-0.2,0) -- ++(-2,4);
\begin{scope}[xshift=4cm]
\draw (0,0) -- ++(0,4);
\foreach \i in {0,0.25,...,4} {
\pgfmathsetmacro{\X}{min(max(-\i+2,-1),1)}
\pgfmathtruncatemacro{\Sign}{sign(int(4*\X)))}
\ifnum\Sign=0
\else
\draw[latex-] (\X,\i) -- (0,\i);
\fi
}
\draw (0,2) -- ++(-1,1) -- ++(0,1);
\draw (0,2) -- ++(1,-1) -- ++(0,-1);
\end{scope}
\end{tikzpicture} %
\end{center}
\end{document}
答案2
使用库可以相对容易地完成此操作intersections
。只有当箭头太短时,我们才需要此方法\ifnum\i=
来取消它。此方法适用于所有其他形状,我只选择了第三个。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}[>=latex]
\draw (0,0)--(0,5);
\draw[name path=line 1] (1,0)--(1,1)--(-1,3)--(-1,5);
\foreach [count=\i] \p in {0,.5,...,5}{
\path [name path=line 2] (-3,\p)--(3,\p);
\path [name intersections={of=line 1 and line 2}];
\ifnum\i=5\else\draw[->] (0,\p)--(intersection-1);\fi
}
\end{tikzpicture}
\end{document}