This Lemniscate envelope is generated by sweeping a circle, which has its center on a hyperbola.
This code was written by Pouya on TeX.SE.
LuaLaTeX is required.
Edit and compile if you like:%!TEX lualatex \documentclass{article} \usepackage[margin=0cm,a5paper,landscape]{geometry} \usepackage{pgfplots} \pgfplotsset{width=\paperwidth, height=\paperheight} \usepackage{luacode} \begin{luacode*} function getCenterRadius(t) a = 1; b = 1; h = 0; k = 0; cX = a*(1/math.cos(t)) + h; cY = b*math.tan(t) + k; R = math.sqrt((cX-h)^2 + (cY-k)^2) -- Classic return cX, cY, R end function printHyperbola() for t=-1.56,1.56,0.02555 do xL,yL,RL = getCenterRadius(t) xR,yR,RR = getCenterRadius(3.1415+t) tex.sprint("\\draw[very thin] (axis cs:"..(xL)..","..(yL)..") circle("..(RL*10)..");") tex.sprint("\\draw[very thin] (axis cs:"..(xR)..","..(yR)..") circle("..(RR*10)..");") end end \end{luacode*} \begin{document} \noindent \begin{tikzpicture} \begin{axis}[xmin=-14.85, xmax=14.85, ymin=-10.5, ymax=10.5, hide axis, ] \directlua{printHyperbola()} \end{axis} \end{tikzpicture} \end{document}