从两条曲线上的点到 x 轴和 y 轴绘制切线

从两条曲线上的点到 x 轴和 y 轴绘制切线

我使用以下代码从点 a 和 o(从某个点出发的两条曲线上)绘制到 x 轴和 y 轴的切线。

点 strt 处的节点用于绘制其他曲线和直线;所以我需要从它开始画两条曲线。

是否有一个代码可以自动完成这个绘图,而不需要尝试从 x 和 y 轴上的不同点绘制线条,直到它们通过曲线上的指定点。

\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{verbatim}
\usepackage{tikz}
\begin{document}
\begin{frame}[t]
\frametitle{tangent lines to x and y axes}
\begin{tikzpicture}[scale=1., transform shape]
\draw [thick] (0,0) -- (7,0);
\draw [thick] (0,0) -- (0,6);

\node at (2.5,2.) (strt){};
\draw [very thick, blue, looseness=.8] (strt.center) to [out=140,in=-80] node [pos=.3] (x){x} +(120.:3.cm) (strt.center) to [out=-40,in=170] node [pos=.25] (o){o} +(-20.:3.cm);
\draw [thick, red] (3.8,0) -- (0,5.2);
\draw [thick, red] (6.2,0) -- (0,3.2);
\end{tikzpicture}
\end{frame}
\end{document}

在此处输入图片描述

答案1

在此处输入图片描述

答案根据 Hany 的评论进行了更新,“我希望点 1 处的切线在 y 轴处结束,并且节点包含一些文本”。

有两种装饰tanget attangent vector at。主要的一种是前者,用于第 1 点和第 2 点。后者用于第 3 点,比较简单,表明 Ti 的意义Z 沿着曲线行进。

关于的一些评论tanget at

  1. 它有三个参数:#1是一个确定曲线上点的子单位浮点数;#2#3乘法常数。
  2. 它在 处画一条切线(线段)#1。将其视为#1以恒定速度描述曲线的时间坐标值。
  3. 切线的长度由两个乘法常数决定:#2表示负方向上切半线的长度(cm默认为长度单位)。 同理#3,但表示正方向上切半线的长度。
  4. 作为副作用,tangent at将以下名称设置为参与构造的点:
  • (point-k)曲线上的点定义为#1
  • (tpoint-k)切线上的点,使得(tpoint-k) - (point-k)为正方向的单位切向量(另请参阅tangent vector at
  • (A-k)以及(B-k)切线的端点。

整数k代表 调用序列中点的索引tangent at。在上图中k为 1 或 2。

评论 你可以使用参数#2#3来得到你想要的点处的切线#1。然后使用(A-k)和/或(B-k)插入你需要的文本。(A-k)在寻找完美的值之前,先画出点可能会更容易#2

代码

\documentclass[11pt, border=.4cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, math}
\usetikzlibrary{decorations.markings}

\begin{document}

\tikzset{
  tangent vector at/.style={
    decoration={
      markings,  % switch on markings
      mark = at position #1 with {
        \filldraw[red] (0, 0) circle (1.5pt) ++(0, 1.5ex)
        node[scale=.8]
        {\pgfkeysvalueof{/pgf/decoration/mark info/sequence number}};
        \draw[red, ->] (0, 0) -- (1, 0);
      }
    }, postaction=decorate
  },
  tangent at/.style args={#1;#2|#3}{% 
    decoration={
      markings,  % switch on markings
      mark = at position #1 with {
        \path (0, 0) coordinate
        (point-\pgfkeysvalueof{/pgf/decoration/mark info/sequence number});
        \path (1, 0) coordinate (tpoint-%
        \pgfkeysvalueof{/pgf/decoration/mark info/sequence number});
        \filldraw[blue] (0, 0) circle (1.5pt) ++(0, 1.5ex)
        node[scale=.8]
        {\pgfkeysvalueof{/pgf/decoration/mark info/sequence number}};
        \draw[blue] (-#2, 0)
        coordinate (A-\pgfkeysvalueof{/pgf/decoration/mark info/sequence number})
        -- (#3, 0)
        coordinate (B-\pgfkeysvalueof{/pgf/decoration/mark info/sequence number});
      }
    }, postaction=decorate
  }  
}

\begin{tikzpicture}[every node/.style={scale=.8}]
  \begin{scope}[gray, very thin, ->]
    \draw (-1, 0) -- (5.5, 0) node[right] {$x$};
    \draw (0, -1) -- (0, 3.5) node[above] {$y$};
  \end{scope}
  
  \draw[tangent at={.4; 1.92|2}, tangent at={.77; 1|1.1},
  tangent vector at=.02]
  (-1, 1) .. controls +(2, 2.3) and +(3, 3) .. ++(4.5, -1.5);
  \filldraw (A-1) circle (1.5pt) node[above left] {Some text};

  % a curve through the first point
  \draw[red] (point-1) to[out=210, in=90] ++(0, -2);
\end{tikzpicture}  

\end{document}

答案2

一个技巧(经过搜索,我认为这就是这个伎俩的起源) 绘制切线的方法是绘制一个具有和draw的矩形节点,因此矩形实际上是一个线段。使用选项将把线绘制为切线。inner sep=0minimum height=0sloped

在此处输入图片描述

我设置了minimum width8cm确保切线与轴相交。为了防止切线穿越我在坐标轴上clip画了一个矩形scope

如果您想要xo标记,您可以将它们添加为附加节点:\node at (x){x};或者\node[blue, above right] at (x){x};

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

\begin{tikzpicture}
\begin{scope} \clip(0,0)rectangle(7,6);
    \node at (2.5,2.) (strt){};
    \draw [very thick, blue, looseness=.8] (strt.center) to [out=140,in=-80] 
        node [pos=.3, sloped, inner sep=0, minimum height=0, minimum width=8cm, draw=red] (x){} 
        +(120.:3.cm) (strt.center) to [out=-40,in=170] 
        node [pos=.25, sloped, inner sep=0, minimum height=0, minimum width=8cm, draw=red] (o){} +(-20.:3.cm);
\end{scope}
\draw [thick] (0,0) -- (7,0);
\draw [thick] (0,0) -- (0,6);
\end{tikzpicture}

\end{document}

答案3

tzplot

绘制给定曲线的切线:

在此处输入图片描述

\documentclass{standalone} 

\usepackage{tzplot}

\begin{document}

\begin{tikzpicture}
\tzhelplines(8,7)
\tzaxes(8,7){$x$}{$y$}
\tzto[thick,blue,bend right=35]"curve"(1,5)(6,1){$u_0$}[r]

% clip: tangent lines extended to the axes
\begin{scope}
\settztangentlayer{main}
\clip (0,0) rectangle (8,7);
\tztangentat[semithick,red]{curve}{2}[0:5]
\tztangentat[semithick,red]{curve}{3}[0:6]
\tztangentat[dashed]{curve}{4}[0:8]
\end{scope}

\tzvXpointat*{curve}{2}(x)
\tzvXpointat{curve}{3}(o)
\tzdot(o)
\end{tikzpicture}

\end{document}

相关内容