12

How can I make a convex lens with TikZ?

I tried using arcs but this doesn't look right.

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \pgfmathsetmacro{\xr}{0.35}
  \pgfmathsetmacro{\yr}{2}

  \draw (0, 0) coordinate (O) arc[x radius = \xr cm, y radius = \yr cm,
  start angle = 90, end angle = 270];
  \draw (O) arc[x radius = \xr cm, y radius = \yr cm,
  start angle = 90, end angle = -90];
\end{tikzpicture}
\end{document}

I would like the arcs to meet at a sharp corner not rounded.

enter image description here

13

Here is one suggestion:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \pgfmathsetmacro{\lensRadius}{2}
  \pgfmathsetmacro{\lensHeight}{1}
  \pgfmathsetmacro{\startAngle}{asin(\lensHeight/\lensRadius)}

  \draw (0,\lensHeight) arc[start angle=180-\startAngle,delta angle=2*\startAngle,radius=\lensRadius];
  \draw (0,\lensHeight) arc[start angle=\startAngle,delta angle=-2*\startAngle,radius=\lensRadius];
\end{tikzpicture}
\end{document}

enter image description here

Slightly modified, for filling, and better line ends:

\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}
  \pgfmathsetmacro{\lensRadius}{2}
  \pgfmathsetmacro{\lensHeight}{1}
  \pgfmathsetmacro{\startAngle}{asin(\lensHeight/\lensRadius)}

  \draw [fill=blue!15]  (0,\lensHeight)
  arc[start angle=180-\startAngle,delta angle=2*\startAngle,radius=\lensRadius]
  arc[start angle=-\startAngle,delta angle=2*\startAngle,radius=\lensRadius]
   -- cycle; % to get a better line end
\end{tikzpicture}
\end{document}

enter image description here

  • What is/does the delta angle option do? – dustin May 27 '14 at 19:49
  • @dustin It is the difference between the start and the end angle. So it creates an arc that spans delta angle degrees. – Torbjørn T. May 27 '14 at 19:51
  • Is the lack of the closing ) in asin(… on purpose? – Henri Menke May 27 '14 at 21:42
  • @HenriMenke No, that is what you'd call a mistake. Thanks. Still worked though ... – Torbjørn T. May 27 '14 at 21:51
11

enter image description here

\documentclass[tikz]{standalone}
\begin{document}

\begin{tikzpicture}

\draw[line join=round,fill=blue!15] (0,0) arc (-30:30:2 and 3) arc (150:210:2 and 3) ;

\end{tikzpicture}
\end{document}  
4

From my previous TiKz studying:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \draw[fill=orange]
  ([shift={(-40:1cm)}]0,0) arc (-40:40:1cm);
   \draw[fill=orange,rotate=180]
  ([shift={(-40:1cm)}]-1.535,0) arc (-40:40:1cm);
\end{tikzpicture}
\end{document}

enter image description here

2

Just draw two lines:

\documentclass[tikz]{standalone}
\begin{document}

\begin{tikzpicture}
\draw[fill=blue!15] (0,2) to[in=130,out=230] (0,-2) to[in=-50,out=50] (0,2) -- cycle;

\end{tikzpicture}
\end{document}

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.