![在交点处绘制曲线切线](https://linux22.com/image/416642/%E5%9C%A8%E4%BA%A4%E7%82%B9%E5%A4%84%E7%BB%98%E5%88%B6%E6%9B%B2%E7%BA%BF%E5%88%87%E7%BA%BF.png)
我正在尝试看看是否有任何方法可以简化以下代码:我有几个函数和一条线。我想在它们与线相交的地方绘制每个函数的切线。
目前一切都是手动完成的:我手动计算了坐标和斜率。我想知道是否有办法简化,特别是考虑到我们可以使用 tikz 库交点获得线和函数的交点。
先谢谢您的帮助。
这是我的代码:
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
[declare function={ f(\x,\a) = \a/\x;}]
\begin{axis}[xmin= 0, xmax = 5,ymin=0, ymax = 5,]
\addplot[black,domain=0.3:4.5,name path= IC1] {f(\x,1)};
\addplot[black,domain=0.7:4.5,name path= IC2] {f(\x,3)};
\addplot[black,domain=1:4.5,name path= IC3] {f(\x,5)};
\addplot[blue,dashed,name path = ray1] {3*\x};
\path [name intersections={of=ray1 and IC1}]; %not used
\addplot [blue] coordinates {({sqrt(1/3) + 0.2},{sqrt(3*1) -0.6}) ({sqrt(1/3) - 0.2},{sqrt(3*1) +0.6})};
\addplot [blue] coordinates {({sqrt(3/3) + 0.2},{sqrt(3*3) -0.6}) ({sqrt(3/3) - 0.2},{sqrt(3*3) +0.6})};
\addplot [blue] coordinates {({sqrt(5/3) + 0.2},{sqrt(3*5) -0.6}) ({sqrt(5/3) - 0.2},{sqrt(3*5) +0.6})};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
使用tzplot包裹:
\documentclass[tikz]{standalone}
\usepackage{tzplot}
\begin{document}
\begin{tikzpicture}
\tzhelplines(6,6)
\tzaxes(6,6)
% plot graphs
\def\ICa{1/\x} \def\ICb{3/\x} \def\ICc{5/\x}
\tzfn\ICa[0.3:4.5] \tzfn\ICb[0.7:4.5] \tzfn\ICc[1.0:4.5]
\def\ray{3*\x}
\tzfn[dashed]\ray[0:2]
% intersections
\tzXpoint*{ray}{ICa}(A) \tzXpoint*{ray}{ICb}(B) \tzXpoint*{ray}{ICc}(C)
% tangent lines
\tztangent[blue]{ICa}(A)[.3:.8]
\tztangent[blue]{ICb}(B)[.7:1.3]
\tztangent[blue]{ICc}(C)[1:1.6]
\end{tikzpicture}
\end{document}