如何使用 \addplot 和方程绘制椭圆

如何使用 \addplot 和方程绘制椭圆

我正在尝试在我的坐标系中绘制一个椭圆。TikZ 提供了一种绘制椭圆的简单方法,但我不喜欢它——我想用实际的解析方程来绘制椭圆。

当我尝试时\addplot[line width=0.7pt, red, samples=2000]{(x^2)/9 + (y^2)/3 == 1};,我收到以下错误消息:

! Package pgfplots Error: Sorry, you can't use 'y' in this context. PGFPlots expected to sample a line, not a mesh. Please use the [mesh] option combined with [samples y>0] and [domain y!=0:0] to indicate a twodimensional input domain.

我采纳了建议[mesh],在序言中添加了[scale y>0]和。但效果并不好,因为它产生了以下错误:[y!=0:0]\addplot

! Package pgfplots Error: Sorry, the supplied plot command is unknown or unsupported by pgfplots! Ignoring it..

好吧,看起来不像pgfplotsy在方程中。好吧,我只需表达y并从那里继续。从这个过程,我得到了\addplot[line width=0.7pt, red, samples=2000]{-sqrt(9 - x^2)/sqrt(3)};,它做过渲染,但只渲染椭圆的下半部分。这是可以预料到的,因为程序在绘制第一个时只取平方根参数的负部分或正部分addplot。解决方案是简单地-在下一个方程中添加一个(或者在本例中将其删除,因为原始方程已经有了一个-),\addplot以强制程序最终(有点)渲染完整的椭圆,这让我想到了我的 MWE:

\documentclass{standalone}

\usepackage{pgfplots}
\usepackage{tikz}

\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
xmin=-5, xmax=5,
grid=both,
axis lines=middle,
minor tick num=9,
axis line style={latex-latex},
ticklabel style={font=\tiny},
axis equal
]

\addplot[line width=0.7pt, red, samples=2000]{-sqrt(9 - x^2)/sqrt(3)};
\addplot[line width=0.7pt, red, samples=2000]{sqrt(9 - x^2)/sqrt(3)};

\end{axis}
\end{tikzpicture}

\end{document}

其结果为:

在此处输入图片描述

我对我的结果不满意,因为:

  1. 需要为一个椭圆绘制两个图形,
  2. 事实上,图表无法在对跖点(原点)附近呈现,
  3. 事实上,我必须设置一个非常大的samples值才能获得一个可以说不错的结果(如果我不这样做,对跖点之间的差距会更大)。

请帮我用\addplot一个方程式画一个椭圆。先谢谢了。

答案1

可以使用极坐标绘制椭圆。有关方程,请阅读椭圆的极坐标形式

在此处输入图片描述

这只是一个最小工作示例。必须调整参数值以符合确切要求。

\documentclass[border=3mm]{standalone}
\usepackage{pgfplots}
%\usepackage{tikz}
%\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=-5, xmax=5,
grid=both,
axis lines=middle,
minor tick num=9,
axis line style={latex-latex},
ticklabel style={font=\tiny},
axis equal
]

\addplot[domain=0:360,data cs=polar, samples=200,
line width=0.7pt, red] (x,{1/(sqrt(0.3-0.2*cos(x)*cos(x)))});
\end{axis}
\end{tikzpicture}
\end{document}

答案2

这些绘图程序通常用于绘制函数,而椭圆则不是。除了像您所做的那样将关系分解为两个函数之外,还可以(实际上效果更好,可以避免需要这么多采样点)将椭圆定义为參數方程;请参阅转换椭圆的部分。您必须知道语法需要 deg(x) 才能获得弧度,并且域必须覆盖 2pi 的范围;我将其从 -pi 扩展到 pi,但 0 到 2pi 也可以。为了确保需要更少的点,我扩展到 -3.4 到 3.4

\documentclass{standalone}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=-5, xmax=5,
grid=both,
axis lines=middle,
minor tick num=9,
axis line style={latex-latex},
ticklabel style={font=\tiny},
axis equal
]
\addplot [domain=-pi:pi,samples=200,red,line width=0.7pt]({3*sin(deg(x))}, {sqrt(3)*cos(deg(x))});
\end{axis}
\end{tikzpicture}

\end{document}

这是在Gummi中运行的结果。 在此处输入图片描述

  1. 仅使用了一个 \addplot
  2. 该图在任何地方都能很好地呈现
  3. 样本量要小得多

编辑:根据下面 marmot 的评论修改代码。

相关内容