tikz 中的卡西尼椭圆曲线

tikz 中的卡西尼椭圆曲线

我对绘制卡西尼椭圆曲线很感兴趣,它有两个焦点A(-1,0) , B (1,0),另一个参数是3。我发现这个问题但它不适合我的需要,因为 asympote 没有被我的 LaTeX 版本编译,而且我之前没有用过它,也不了解它。

所以,我想知道我们是否可以用 tikz 来做。在链接问题的任何评论中,它都说有人会将其翻译成 tikz,但它似乎是一个链接。也许我错了,在某个地方有一个使用 tikz 的解决方案

先感谢您。

答案1

您需要确定一个好的域和一些系数。颜色更新

\documentclass[a4paper]{article}
\usepackage{tkz-fct}

\begin{document}
\begin{tikzpicture}[scale=.75]
   \tkzInit [xmin=-1,xmax=1,
             ymin=-1,ymax=1,
             xstep=.2,ystep=.2]
  \foreach \i in {4,3.8,...,1.2}    {%
  \pgfmathsetmacro{\n}{8*\i}
  \tkzFctPolar[domain=-pi:pi,fill=green!\n!white]{%
  sqrt(cos(2*t)+sqrt(\i-sin(2*t)*sin(2*t)))}  
  \tkzFctPolar[domain=-pi:pi,fill=green!\n!white]{%
  sqrt(cos(2*t)+sqrt(\i+sin(2*t)*sin(2*t)))}
  }
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

极坐标似乎是绘制以角度为参数的曲线图的好方法。半径可以用维基百科文章

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
  x=2cm,
  y=2cm,
]
  \def\samples{180}
  \def\c{1}
  \pgfmathsetmacro\cc{\c*\c}
  \pgfmathsetmacro\cccc{\cc*\cc}
  \def\a{1.01}
  \foreach\a in {1.001, 1.01, 1.05, 1.1, 1.3, 1.6, 2, 2.5, 3} {
    \pgfmathsetmacro\aa{\a*\a}
    \pgfmathsetmacro\aaaa{\aa*\aa}
    \pgfmathsetmacro\aaaaMcccc{\aaaa - \cccc}
    \draw
      plot[
        variable=\t,
        domain=0:360-1/\samples,
        samples=\samples,
        smooth cycle,
      ]
      (\t:{\cc*sqrt(\cc*cos(2*\t) + sqrt(\cccc*cos(2*\t)*cos(2*\t) + \aaaaMcccc))})
    ;
  }
  \path plot[mark=x] coordinates { (-\c, 0) (\c, 0) };
\end{tikzpicture}
\end{document}

结果

角度为\t,焦点可配置为\c。示例显示了 不同 值的曲线\a

双纽线

在这种情况下\a等于\c,这简化了公式。由于角度现在是不连续的,曲线分为两部分绘制,首先是右侧,然后是左侧。还显示了填充。

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
  x=2cm,
  y=2cm,
]
  \def\samples{100}
  \def\c{1}
  \pgfmathsetmacro\cc{\c*\c}
  \pgfmathsetmacro\cccc{\cc*\cc}
  \def\a{1.01}
  \draw[fill=green!50!white]
    (0, 0) --
    plot[
      variable=\t,
      domain=-45+1/\samples:45-1/\samples,
      samples=\samples,
      smooth,
    ]
    (\t:{\cc*sqrt(\cc*cos(2*\t) + \cc*cos(2*\t))})
    -- cycle
  ;
  \draw[fill=green!50!white]
    (0, 0) --
    plot[
      variable=\t,
      domain=180-45+1/\samples:180+45-1/\samples,
      samples=\samples,
      smooth,
    ]
    (\t:{\cc*sqrt(\cc*cos(2*\t) + \cc*cos(2*\t))})
    -- cycle
  ;
  \path plot[mark=x] coordinates { (-\c, 0) (\c, 0) };
\end{tikzpicture}
\end{document}

结果

答案3

使用 运行xelatex。它使用隐式定义的函数以及变量\rA\rC

\documentclass[a4paper]{article}
\usepackage{pst-func}

\begin{document}
\psset{unit=2}
\begin{pspicture}(-2.5,-2.5)(2.5,2.5)
\psaxes[labels=none,Dx=0.5,Dy=0.5,ticksize=-3pt 3pt]{->}(0,0)(-2,-2)(2,2)[$x$,-90][$y$,0]
\def\rC{1} 
\pgfforeach \rA in {0,0.2,...,1.6}{%
\psplotImp[linewidth=1pt,algebraic,linecolor=blue!60]%
  (-3,-3)(3,3){(x^2+y^2)^2-2*\rC^2*(x^2-y^2)-\rA^4+\rC^4}}
\end{pspicture}

\begin{pspicture}(-2.5,-2.5)(2.5,2.5)
\psaxes[labels=none,Dx=0.5,Dy=0.5,ticksize=-3pt 3pt]{->}(0,0)(-2,-2)(2,2)[$x$,-90][$y$,0]
\def\rC{2} 
\pgfforeach \rA in {0,0.2,...,2.4}{%
    \psplotImp[linewidth=1pt,algebraic,linecolor=red!60]%
    (-3,-3)(3,3){(x^2+y^2)^2-2*\rC^2*(x^2-y^2)-\rA^4+\rC^4}}
\end{pspicture}
\end{document}

在此处输入图片描述

相关内容