3

Is there any slick way to create an n-sided (n is some arbitrary integer, e.g. n = 23) regular polygon, inscribed into a circle, using tkz-euclide?

Or do I have to use the plain TikZ functions (not as intuitive as tkz-euclide)?

3 Answers 3

8

I find your lack of faith disturbing...

\documentclass[tikz]{standalone}
\usetikzlibrary{shapes.geometric,calc}
\begin{document}
\begin{tikzpicture}
\node[regular polygon,regular polygon sides=23,draw,minimum height=5cm] (a) at (0,0) {};
\draw[red] let \p1=($(a.corner 1)-(a.center)$), \n1={veclen(\x1,\y1)} in circle (\n1);
\foreach \x[count=\xi] in {A,B,...,W}{
  \node (a-\xi) at ([shift={({90+(\xi-1)*360/23}:3mm)}]a.corner \xi) {\x};
}
\end{tikzpicture}
\end{document}

enter image description here

5
  • And if I'd like to label the vertices A,B,C,...? What should be added then?
    – marmistrz
    Mar 8, 2015 at 17:28
  • @marmistrz Added.
    – percusse
    Mar 8, 2015 at 17:34
  • Thanks! Could you please explain how the lines 6-8 work?
    – marmistrz
    Mar 8, 2015 at 17:46
  • Nice (+1)! I had no idea the ... syntax could handle alphabetic sequences automatically. Mar 8, 2015 at 18:16
  • @marmistrz It goes through every corner anchor which TikZ automatically numbers starting from the top. Then it places a node at each of those but instead placing them right on the anchor it shifts them the amount of 23 degrees depending on the number of iteration which is held in \xi. It's just a compact notation trust me nothing fancy happening.
    – percusse
    Mar 8, 2015 at 19:02
6

A PSTricks solution using the pst-poly package:

\documentclass{article}

\usepackage{pst-poly}

% parameters
\def\radius{4}
\def\sides{12}

\begin{document}

\begin{pspicture}[dimen = m](-\radius,-\radius)(\radius,\radius)
  \rput(0,0){\PstPolygon[PolyNbSides = \sides, unit = \radius]}
  \pscircle(0,0){\radius}
\end{pspicture}

\end{document}

output

3
  • +1 for not threatening the use of the dark side of the force Mar 8, 2015 at 17:45
  • @DavidCarlisle I don't follow you but I'm glad I haven't used 'the dark side of the force'. :) Mar 8, 2015 at 17:46
  • 2
    See the link at the top of the other answer:-) Mar 8, 2015 at 17:49
3

A MetaPost solution using a macro of my own. Example shamelessly inspired from Svend Tveskæg's answer.

\documentclass[border=2bp]{standalone}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
vardef regular_polygon(expr center, radius, n) =
    save angl; angl := 360/n;
    (right for i = 1 upto n-1: -- dir(i*angl) endfor -- cycle) 
        scaled radius shifted center
enddef;
beginfig(0);
    draw regular_polygon(origin, 4cm, 12);
    draw fullcircle scaled 8cm;
endfig;
\end{mplibcode}
\end{document}

output

Edit Another version, a bit more elaborated, with alphabetic labels. The number of summits n must be lower than 27 to keep the labeling coherent :-)

\documentclass[border=2bp]{standalone}
\usepackage{luamplib}
    \mplibsetformat{metafun}
    \mplibtextextlabel{enable}
\begin{document}
\begin{mplibcode}
vardef regular_polygon(expr centre, radius, n) =
    clearxy; save angl; angl := 360/n; 
    z0 = centre + radius*right; freelabel("$A$", z0, centre); 
    z0 for i = 1 upto n-1:
        hide(z[i] = z[i-1] rotatedaround(centre, angl); 
            freelabel("$" & char(65+i) & "$", z[i], centre)) 
        -- z[i] 
    endfor -- cycle
enddef;
beginfig(0);
    draw regular_polygon(origin, 4cm, 12) withcolor red;
    draw fullcircle scaled 8cm;
endfig;
\end{mplibcode}
\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.