我想绘制 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];
但这并不适用于更一般的函数。
完整代码及输出:
\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}