绘制用两个变量定义的 Tikz 图,即 4=x^2+y^2

绘制用两个变量定义的 Tikz 图,即 4=x^2+y^2

我想绘制 4=(x-2)^2+(y-2)^2 的图形,如何在 tikz plot 中执行此操作?我尝试过重新排列,但结果总是出错!\draw [domain=0:4] plot ({\x},{2-\sqrt{4\x-\x*\x}});有没有一种简单的方法可以让我轻松地输入这样的图形,如果不需要重新排列,我将不胜感激!

答案1

导致错误的原因是您使用了\sqrt而不是sqrt。前者是一个用于排版根的宏,而后者是一个由 定义的函数,pgfmath实际上用于计算平方根。此外,我认为乘法必须是明确的,所以4*\x,而不是4\x

因此,您的代码片段的工作版本将是

\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw [domain=0:4] plot ({\x},{2-sqrt{4*\x-\x*\x}});
\end{tikzpicture}
\end{document}

但是,那不是以 (2,2) 为中心、半径为 2 的半圆,我猜那正是您想要的。

完整圆圈的正确代码是

\draw [domain=0:4,samples=200] plot ({\x},{2+sqrt(4-(\x-2)^2))})
                               plot ({\x},{2-sqrt(4-(\x-2)^2))});

由于一些舍入问题,遗憾的是这并没有绘制出一个完整的圆,我预计在 x=4 处没有一个点。解决这个问题的方法是使用键来samples at确保间隔的端点有一个点,即

\draw [samples at={0,0.01,...,3.99,4}] plot ({\x},{2+sqrt(4-(\x-2)^2))})
                                       plot ({\x},{2-sqrt(4-(\x-2)^2))});

绘制此类隐函数的更有效的方法是使用gnuplot使用如何使用 gnuplot 和 tikz-pgf 平滑地绘制隐函数?问题中方程的代码如下所示。gnuplot必须安装,并且您必须使用进行编译--shell-escape,例如pdflatex --shell-escape filename.tex

\begin{tikzpicture}
    \draw plot[id=curve, raw gnuplot] function{
      f(x,y) = (y-2)**2 + (x-2)**2 - 4;
      set xrange [0:4];
      set yrange [0:4];
      set view 0,0;
      set isosample 1000,1000;
      set cont base;
      set cntrparam levels discrete 0;
      unset surface;
      splot f(x,y)
    };
\end{tikzpicture}

当然,迄今为止绘制圆的最简单方法是\draw (2,2) circle[radius=2];但这并不适用于更一般的函数。

完整代码及输出:

enter image description here

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw [domain=0:4,samples=200] plot ({\x},{2+sqrt(4-(\x-2)^2))})
                               plot ({\x},{2-sqrt(4-(\x-2)^2))});

\node at (2,2) {1};
\end{tikzpicture}
\begin{tikzpicture}
\draw [samples at={0,0.01,...,3.99,4}] plot ({\x},{2+sqrt(4-(\x-2)^2))})
                                       plot ({\x},{2-sqrt(4-(\x-2)^2))});
\node at (2,2) {2};
\end{tikzpicture}

\begin{tikzpicture}
    \draw plot[id=curve, raw gnuplot] function{
      f(x,y) = (y-2)**2 + (x-2)**2 - 4;
      set xrange [0:4];
      set yrange [0:4];
      set view 0,0;
      set isosample 1000,1000;
      set cont base;
      set cntrparam levels discrete 0;
      unset surface;
      splot f(x,y)
    };
\node at (2,2) {3};
\end{tikzpicture}
\begin{tikzpicture}
\draw (2,2) circle[radius=2];
\node at (2,2) {4};
\end{tikzpicture}
\end{document}

相关内容