答案1
这是一个非常“黑客”的解决方案,我相信有些人能够给你一个更优雅的答案,但这绝对有效!
我也喜欢它,因为对我来说它是一种适用范围非常广泛的技术(尤其是使用交叉点)。
梅威瑟:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\begin{document}
\begin{tikzpicture}
\draw[<->] (0,6) node[above]{M}--(0,0)--(9,0)node[right]{L};
\draw[name path = C] (0,0) .. controls (3,6) and (5,6) .. (8,0) node[pos = 0.5, above] {$M_{max} = \dfrac{1}{8} \cdot q \cdot L^2$};
\foreach \i in {0,0.5,...,8}{
\draw[draw opacity = 0, name path = L] (\i,0)--(\i,6);
\draw [name intersections ={of = L and C}] let \p1 = (intersection-1) in (\x1,\y1)--(\x1,0);
}
\end{tikzpicture}
\end{document}
输出:
PS:如果您需要曲线看起来有所不同,只需编辑 的代码即可\draw[name path = C]...
。例如,将其更改为:
\draw[name path = C] (0,0) .. controls (2,4) and (6,4) .. (8,0) node[pos = 0.5, above] {$M_{max} = \dfrac{1}{8} \cdot q \cdot L^2$};
你得到了这个(更接近你的原始图像)。我画了这个只是为了让你看看如何绘制曲线的示例。:)
答案2
正如我在评论中提到的,ycomb
可以使用图来实现这一点。以下是两个示例,第一个是修改后的版本土拨鼠密码,第二个是更详细(并且可能比它需要的更复杂)的版本,使用pgfplots
。
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.3}
\begin{document}
\begin{tikzpicture}[
declare function={
M(\x) = 4-(\x-4)*(\x-4)/4;
}
]
\draw[latex-latex] (0,6) node[left] {$\mathbf{M}$} |- (8.5,0) node[below]
{$\mathbf{L}$};
\draw[thick] plot[variable=\x,domain=0:8,smooth] ({\x},{M(\x)});
\draw[thick] plot[variable=\x,domain=0:8,ycomb] ({\x},{M(\x)});
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[
declare function={
t = 2;
mid = 5;
d=4.5;
M(\x) = -(\x-mid)^2*(t/d^2) + t;
},
axis lines=middle,
xtick=\empty, ytick=\empty,
ylabel=$M$, xlabel=$L$,
enlarge x limits,
enlarge y limits={value=0.5,upper},
domain=mid-d:mid+d
]
\addplot [thick] {M(x)} node[midway, above] {$M_{\max} = \frac{1}{8} qL$};
\addplot [ycomb, samples=15] {M(x)};
\end{axis}
\end{tikzpicture}
\end{document}
答案3
还有一种可能性:使用pattern
。如果你使用\clip
,则由@nidhin 建议,我会使用网格而不是 foreach 循环。事实上,如果您使用\foreach
,由于函数已知,您不需要\clip
。
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{patterns}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}
\draw[latex-latex] (0,6) node[left] {$\boldsymbol{M}$} |- (8.5,0) node[below]
{$\boldsymbol{L}$};
\draw[thick,pattern=vertical lines] plot[variable=\x,domain=0:8,smooth] ({\x},{4-(\x-4)*(\x-4)/4});
\end{tikzpicture}
\begin{tikzpicture}
\draw[latex-latex] (0,6) node[left] {$\boldsymbol{M}$} |- (8.5,0) node[below]
{$\boldsymbol{L}$};
\draw[thick] plot[variable=\x,domain=0:8,smooth] ({\x},{4-(\x-4)*(\x-4)/4});
\clip plot[variable=\x,domain=0:8,smooth] ({\x},{4-(\x-4)*(\x-4)/4});
\draw (0,0) grid[xstep=1cm,ystep=6cm] (8,5);
\end{tikzpicture}
\end{document}
答案4
使用clip
\documentclass{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[>=latex]
\draw(4,5) node {$M_{max} = \dfrac18 \cdot q \cdot L^2$};
\draw[<->] (0,6) node[above]{M}--(0,0)--(9,0)node[right]{L};
\draw[clip] (0,0) .. controls (3,6) and (5,6) .. (8,0) --cycle;
\foreach \i in {0,0.5,...,8}
\draw (\i,0) -- ++ (0,10);
\end{tikzpicture}
\end{document}