绘制两条曲线的交点

绘制两条曲线的交点

我正在绘制以下填充区域

\documentclass{scrartcl}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usepgfplotslibrary{fillbetween}
\begin{document}
\begin{figure}[htpb]
\centering
\begin{tikzpicture}[scale=.5]
\begin{axis}[hide axis, clip bounding box=default tikz]
    \plot[name path=A, very thick,samples=201,domain=-1:1, color=blue] {sqrt(x*(x^2-x-1)+1};
    \plot[name path=B, very thick,samples=201,domain=-1:1, color=blue] {-sqrt(x*(x^2-x-1)+1};
    \addplot[fill=blue,opacity=.3] fill between [of=A and B, soft clip={domain=-1:1}];
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}

产生这个输出

在此处输入图片描述

如您所见,右侧的尖点缺失(打印在纸上时,间隙实际上很大)。当将域稍微增加到 1 以上时,尖点看起来仍然有点奇怪。到目前为止,我最好的解决方案是在 (1,0) 处添加一个节点,这看起来还不错,但不是最佳方案。有没有更好的方法来处理这种情况?

答案1

您需要在一条曲线上绘制它才能获得line join=miter看起来不错的(默认)。然后,您也可以关闭曲线,以便填充它。所以你不需要fillbetween。你也没有真正使用pgfplots任何东西。(也没有使用xcolor

\documentclass[tikz, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
\filldraw[blue, very thick, fill opacity=.3, samples=201]  plot[domain=-1:0.99] ( \x , {sqrt(\x*(\x*\x-\x-1)+1} )  --  plot[domain=1:-1] ( \x , {-sqrt(\x*(\x*\x-\x-1)+1} ) -- cycle;
\end{tikzpicture}
\end{document}

填充蓝色斑点

如您所见,您在 PGFplots 中的版本被拉长了,因为您缺少axis equalPGFplots 中的选项。如果您更喜欢拉长的版本,那么您可以将例如添加xscale=1.4到上面的代码中。

答案2

一个简单的解决方法是添加line cap=round

在此处输入图片描述

或者line cap=rect

在此处输入图片描述

命令如下\plot

\plot[line cap=rect, name path=A, very thick,samples=201,domain=-1:1, color=blue] {sqrt(x*(x^2-x-1)+1};
\plot[line cap=rect, name path=B, very thick,samples=201,domain=-1:1, color=blue] {-sqrt(x*(x^2-x-1)+1};

相关内容