答案1
考虑到这个等式,我认为对你的问题的回答应该由两个步骤组成。
- 找到由方程定义的曲线的参数化。
- 使用
plot
TikZ绘制曲线。
困难的部分是 1) 。下面的代码是 2) 的明确开发。至于 1),我不会给出所有的数学细节。如果你需要它们,我可以稍后添加它们。我只会尝试证明代码中出现的常量和函数的合理性。
首先必须将方程式变成对称形式。例如改变坐标x
:s = 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/a
d
r_m = a/2 +d
d
(-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}