我想绘制曲线 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}