代数曲线图 tikz

代数曲线图 tikz

我需要在 tikz 中绘制这条代数曲线

在此处输入图片描述

但我不明白如何在 tikz 中处理这些曲线,因为它不是一个函数。Desmos 说它应该看起来像这样

在此处输入图片描述

我只需要一条没有轴或其他东西的曲线,并且只需要 tikz。

答案1

1

考虑到这个等式,我认为对你的问题的回答应该由两个步骤组成。

  1. 找到由方程定义的曲线的参数化。
  2. 使用plotTikZ绘制曲线。

困难的部分是 1) 。下面的代码是 2) 的明确开发。至于 1),我不会给出所有的数学细节。如果你需要它们,我可以稍后添加它们。我只会尝试证明代码中出现的常量和函数的合理性。

首先必须将方程式变成对称形式。例如改变坐标xs = x -3/2。最后,我们回到初始x坐标。因此,接下来我考虑方程式

1/sqrt((x+a)^2 +y^2) + 1/sqrt((x-a)^2 +y^2) = 2/a

我们正在寻找P距离r_m(-a, 0)的点,使得r_p。正是这个几何问题产生了参数化。参数为,其中。(下图表示了固定 值的几何情况。点和显示为蓝点。)(a, 0)1/r_m +1/r_p = 2/adr_m = a/2 +dd(-a, 0)(a, 0)

在此处输入图片描述

x和的公式y出现在函数eForX和中eForY。定义域遵循兼容性条件。

代码

\documentclass[11pt, margin=.5cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{math, calc}

\begin{document}
% https://tex.stackexchange.com/questions/688042/algebraic-curve-plot-tikz

\tikzmath{
  real \a, \dmin, \dmax;
  \a = 3/2;
  \dmin = (-1 +sqrt(5)/2)*\a;
  \dmax = (1 +sqrt(5)/2)*\a;
  \dFixed = .27*\a;
  \rMFixed = \a/2 +\dFixed;
  \rPFixed = \a/2*(\a/(2*\dFixed) +1);
  function eForX(\t) {%
    \s = \t/\a;
    \res = \s*\s +\s -1/(4*\s) -1/(16*\s*\s);
    return \a/4*\res;
  };
  function eForY(\t) {%
    \res = (\a/2 +\t)*(\a/2 +\t) -(eForX(\t) +\a)*(eForX(\t) +\a);
    return sqrt(\res);
  };
}

\begin{tikzpicture}[every node/.style={scale=.5}]
  % translated coordinate system
  \draw[very thin, ->] (-2*\a, 0) -- ++(4*\a, 0) node[right] {$x$};
  \foreach \i in {-1, 0, ..., 4}{%
    \draw (\i -\a, 0) -- ++(0, -2pt) node[below] {\i};
  }
  \draw[very thin, ->] (-\a, -\a) -- ++(0, 2* \a) node[above] {$y$};
  \draw[very thin, gray!50, xshift=-\a cm] (-\a, -\a) grid ++(4*\a , 2* \a);
  
  \draw[red, thick, variable=\t, domain=\a/2:\dmax, samples=100]
  plot ({eForX(\t)}, {eForY(\t)});
  \draw[red, thick, variable=\t, domain=\a/2:\dmax, samples=100]
  plot ({-eForX(\t)}, {eForY(\t)});

  \draw[red, thick, variable=\t, domain=\a/2:\dmax, samples=100]
  plot ({eForX(\t)}, {-eForY(\t)});
  \draw[red, thick, variable=\t, domain=\a/2:\dmax, samples=100]
  plot ({-eForX(\t)}, {-eForY(\t)});

  \filldraw[blue] (-\a, 0) circle (1pt) (\a, 0) circle (1pt);
  % \draw[blue] (-\a, 0) circle (\a/2 +\dmin);
  % \draw[blue] (\a, 0) circle (\a/2 +\dmax);
\end{tikzpicture}
\end{document}

相关内容