Tikz 中绘制曲线时出错

Tikz 中绘制曲线时出错

我想绘制曲线 y(x-2)^2-x(y-8)^2=0。这是我编写的代码

\begin{tikzpicture}[xscale=1,yscale=1]
\begin{axis}[axis x line=center, axis y
line=center,xmin=-40, ymin=-25, xmax=20, ymax=30, xlabel={$x$}, ylabel={$y$},
height=9cm, width=7cm, xlabel style={right}, ylabel style={above}]
\addplot[id=curve, color=red, raw gnuplot, samples=50] function{ f(x,y) =
y*(x-2)^2-x*(y-8)^2; 
set xrange [-40:20]; 
set yrange [-25:30]; 
set view 0,0;
set isosample 1000,1000; 
%set size square; 
set cont base; 
set cntrparam levels
incre 0,0.1,0; unset surface; 
splot f(x,y) };
\end{axis}
\end{tikzpicture}

我得到以下曲线在此处输入图片描述

但在 y=10 附近没有间隙。如何解决。

答案1

Z 方法。

首先,如果我们解方程y(或x如符号 1 所示),我们将得到

在此处输入图片描述

因此我们可以声明两个函数:

\pgfmathdeclarefunction{aux}{1}{\pgfmathparse{#1+12+4/#1}}
\pgfmathdeclarefunction{myf}{2}{\pgfmathparse{0.5*(aux(#1)+#2*sqrt(aux(#1)*aux(#1)-256))}}

第一个是重复部分。第二个是我们要绘制的函数,它接受两个参数:变量和平方根前的正/负符号 (-1,+1)。

现在我们只需要绘制函数,避开不同分支相互交叉的难点(也绘制出来了)。这是为了防止恼人的精度错误,你知道:

包 PGF 数学错误:我无法计算负数的平方根......

完整代码:

\documentclass[tikz,border=2mm]{standalone}

\pgfmathdeclarefunction{aux}{1}{\pgfmathparse{#1+12+4/#1}}
\pgfmathdeclarefunction{myf}{2}{\pgfmathparse{0.5*(aux(#1)+#2*sqrt(aux(#1)*aux(#1)-256))}}

\begin{document}
\begin{tikzpicture}[scale=0.2,thick,samples=100,line cap=round]
\pgfmathsetmacro\px{-0.5*(28+sqrt(768))} % -27.8564 copy-pasted from the generated pdf
% axes and labels
\draw[-latex] (-40,0) -- (20,0) node [right] {$x$};
\draw[-latex] (0,-25) -- (0,30) node [above] {$y$};
\foreach\i in {-40,-20,20}
  \draw (\i,0.3) --+ (0,-0.6) node [below] {$\i$};
\foreach\i in {-20,-10,10,20,30}
  \draw (0.3,\i) --+ (-0.6,0) node [left]  {$\i$};
% right, descending branch
\draw[red] plot[domain=0.2:1.9] (\x,{myf(\x, 1)}) -- plot[domain=2.1:20]      (\x,{myf(\x,-1)});
% right, ascending branch
\draw[red] (0,0) --
           plot[domain=0.1:1.9] (\x,{myf(\x,-1)}) -- plot[domain=2.1:20]      (\x,{myf(\x, 1)});
% left branch
\draw[red] plot[domain=-40:\px] (\x,{myf(\x, 1)}) -- plot[domain=\px-0.1:-40] (\x,{myf(\x,-1)});
% points
\filldraw[red] (0,0)    circle (2mm);
\filldraw[red] (2,8)    circle (2mm) node[black,right] {$(2,8)$};
\filldraw[red] (\px,-8) circle (2mm) node[black,right] {$(\px,-8)$};
\end{tikzpicture}
\end{document}

输出结果如下: 在此处输入图片描述

相关内容