如何在 Tikz 中制作曲线图以及从 x 轴到该图的垂直线?

如何在 Tikz 中制作曲线图以及从 x 轴到该图的垂直线?

我基本上只是想让 Tikz 中的这个图形更好一些,但我不知道如何制作从 x 轴到图形 M(x) 的垂直线。函数是 M(x)=−1/2·q·x^2+1/2·q·L·x,其中 q 和 L 的值首先并不重要。

(该图是在 Maple 2018 中制作的。它提示了垂直线上的错误。)

最高点位于 Mmax 的曲线

答案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}

在此处输入图片描述

相关内容