Diagram

Napoleon and Van Aubel

Two regular side constructions encoded by complex rotations

The external equilateral-triangle configuration of Napoleon’s theorem and the external-square configuration of Van Aubel’s theorem, with complete construction source.

Methods Complex numbers · Direct similarity

Drawing tool: tkz-euclideSource available

Completed figures

Triangle ABC with external equilateral triangles and their centers P, Q, R joined to form an equilateral triangle.
Figure 1. The centers P, Q, R of the three external equilateral triangles form the Napoleon triangle.
Quadrilateral ABCD with external squares and their centers P, Q, R, S; the segments PR and QS are equal in length and meet at a right angle.
Figure 2. The segments joining the centers of opposite external squares are equal and perpendicular.

Complete source

Napoleon’s theorem
% Figure for a Classical Theorem Note
% Figure: Napoleon's theorem by complex rotation
% Site: Elementary Geometry
% Website: https://elementarygeometry.org/
% Drawing tool: tkz-euclide
% Output format: SVG
% Standard plate: 5:4
% Last verified: 2026-09-02
% Accent target: none
%
% Editable source for public/diagrams/napoleon-theorem-complex-rotation.svg.
% The production site serves the committed SVG and does not compile TeX.
\documentclass[tikz,border=8pt]{standalone}
\usepackage{tkz-euclide}

\definecolor{egNavy}{HTML}{17243D}
\definecolor{egGray}{HTML}{777671}
\definecolor{egRust}{HTML}{92513F}
\newcommand{\egUseStandardPlateAt}[1]{%
  \pgfresetboundingbox
  \path[use as bounding box]
    ([xshift=-102pt,yshift=-80pt]#1)
    rectangle
    ([xshift=102pt,yshift=80pt]#1);%
}
\newcommand{\egUseStandardPlate}{%
  \coordinate (egPlateCenter) at (current bounding box.center);%
  \egUseStandardPlateAt{egPlateCenter}%
}
\tikzset{
  eg figure/.style={line cap=round,line join=round,every node/.append style={font=\normalsize,text=egNavy}},
  eg main/.style={draw=egNavy,line width=0.75pt},
  eg support/.style={draw=egGray,line width=0.52pt},
  eg support dashed/.style={draw=egGray,line width=0.52pt,dash pattern=on 3pt off 3pt},
  eg accent/.style={draw=egRust,line width=0.75pt},
  eg mark/.style={draw=egNavy,line width=0.50pt}
}

\begin{document}
\begin{tikzpicture}[eg figure,scale=1.0]
  % Use a uniform similarity of the standard ABC configuration shared by the
  % Euler-line and centroid figures.
  \tkzDefPoint(0,0){S}
  \tkzDefPoint(-0.5,4.2){A0}
  \tkzDefPoint(-3,0){B0}
  \tkzDefPoint(3,0){C0}
  \tkzDefPointBy[homothety=center S ratio 0.5](A0)\tkzGetPoint{A}
  \tkzDefPointBy[homothety=center S ratio 0.5](B0)\tkzGetPoint{B}
  \tkzDefPointBy[homothety=center S ratio 0.5](C0)\tkzGetPoint{C}

  % Since ABC is counterclockwise, reversing each side before the positive
  % 60-degree rotation places the equilateral vertex outside ABC.
  \tkzDefEquilateral(C,B)\tkzGetPoint{X}
  \tkzDefEquilateral(A,C)\tkzGetPoint{Y}
  \tkzDefEquilateral(B,A)\tkzGetPoint{Z}

  % The centers of the three outward equilateral triangles.
  \tkzDefTriangleCenter[centroid](B,C,X)\tkzGetPoint{P}
  \tkzDefTriangleCenter[centroid](C,A,Y)\tkzGetPoint{Q}
  \tkzDefTriangleCenter[centroid](A,B,Z)\tkzGetPoint{R}

  \tkzDrawSegments[eg support](A,B B,C C,A B,X X,C C,Y Y,A A,Z Z,B)
  \tkzDrawPolygon[eg main](P,Q,R)

  \tkzDrawPoints[color=egNavy,fill=egNavy,size=1.6](A,B,C,X,Y,Z)
  \tkzDrawPoints[color=egNavy,fill=egNavy,size=1.6](P,Q,R)

  \tkzLabelPoints[above](A)
  \tkzLabelPoints[below left](B)
  \tkzLabelPoints[below right](C)
  \tkzLabelPoints[below](P)
  \tkzLabelPoints[right](Q)
  \tkzLabelPoints[left](R)
  \egUseStandardPlate
\end{tikzpicture}
\end{document}
Van Aubel’s theorem
% Figure for a Classical Theorem Note
% Figure: Van Aubel's theorem by quarter-turns
% Site: Elementary Geometry
% Website: https://elementarygeometry.org/
% Drawing tool: tkz-euclide
% Output format: SVG
% Standard plate: 5:4
% Last verified: 2026-09-03
% Accent target: none
%
% Editable source for public/diagrams/van-aubel-theorem-complex-rotation.svg.
% Prepared for the web edition of this note.
% The production site serves the committed SVG and does not compile TeX.
\documentclass[tikz,border=8pt]{standalone}
\usepackage{tkz-euclide}

\definecolor{egNavy}{HTML}{17243D}
\definecolor{egGray}{HTML}{777671}
\definecolor{egRust}{HTML}{92513F}
\newcommand{\egUseStandardPlateAt}[1]{%
  \pgfresetboundingbox
  \path[use as bounding box]
    ([xshift=-102pt,yshift=-80pt]#1)
    rectangle
    ([xshift=102pt,yshift=80pt]#1);%
}
\newcommand{\egUseStandardPlate}{%
  \coordinate (egPlateCenter) at (current bounding box.center);%
  \egUseStandardPlateAt{egPlateCenter}%
}
\tikzset{
  eg figure/.style={line cap=round,line join=round,every node/.append style={font=\normalsize,text=egNavy}},
  eg main/.style={draw=egNavy,line width=0.75pt},
  eg support/.style={draw=egGray,line width=0.52pt},
  eg support dashed/.style={draw=egGray,line width=0.52pt,dash pattern=on 3pt off 3pt},
  eg accent/.style={draw=egRust,line width=0.75pt},
  eg mark/.style={draw=egNavy,line width=0.50pt}
}

\begin{document}
\begin{tikzpicture}[eg figure,scale=1.0]
  % A visibly nonsymmetric convex quadrilateral, listed counterclockwise.
  % A uniform similarity keeps the complete square configuration on the plate.
  \tkzDefPoint(0,0){O}
  \tkzDefPoint(-1.1,2.2){A0}
  \tkzDefPoint(-1.8,-1.4){B0}
  \tkzDefPoint(1.8,-1.4){C0}
  \tkzDefPoint(0.9,1.4){D0}
  \tkzDefPointBy[homothety=center O ratio 0.5](A0)\tkzGetPoint{A}
  \tkzDefPointBy[homothety=center O ratio 0.5](B0)\tkzGetPoint{B}
  \tkzDefPointBy[homothety=center O ratio 0.5](C0)\tkzGetPoint{C}
  \tkzDefPointBy[homothety=center O ratio 0.5](D0)\tkzGetPoint{D}

  % The vertices are counterclockwise, so a clockwise quarter-turn of each
  % oriented side points outside ABCD. The opposite outer vertex is obtained
  % by the corresponding counterclockwise quarter-turn at the other endpoint.
  \tkzDefPointBy[rotation=center A angle -90](B)\tkzGetPoint{Aab}
  \tkzDefPointBy[rotation=center B angle 90](A)\tkzGetPoint{Bab}
  \tkzDefMidPoint(B,Aab)\tkzGetPoint{P}

  \tkzDefPointBy[rotation=center B angle -90](C)\tkzGetPoint{Bbc}
  \tkzDefPointBy[rotation=center C angle 90](B)\tkzGetPoint{Cbc}
  \tkzDefMidPoint(C,Bbc)\tkzGetPoint{Q}

  \tkzDefPointBy[rotation=center C angle -90](D)\tkzGetPoint{Ccd}
  \tkzDefPointBy[rotation=center D angle 90](C)\tkzGetPoint{Dcd}
  \tkzDefMidPoint(D,Ccd)\tkzGetPoint{R}

  \tkzDefPointBy[rotation=center D angle -90](A)\tkzGetPoint{Dda}
  \tkzDefPointBy[rotation=center A angle 90](D)\tkzGetPoint{Ada}
  \tkzDefMidPoint(A,Dda)\tkzGetPoint{S}

  \tkzInterLL(P,R)(Q,S)\tkzGetPoint{T}

  \tkzDrawPolygon[eg support](A,B,Bab,Aab)
  \tkzDrawPolygon[eg support](B,C,Cbc,Bbc)
  \tkzDrawPolygon[eg support](C,D,Dcd,Ccd)
  \tkzDrawPolygon[eg support](D,A,Ada,Dda)

  \tkzDrawSegments[eg main](P,R Q,S)

  % One matching tick on each main segment records |PR|=|QS| without
  % crowding the right-angle mark at their intersection.
  \coordinate (PRmark) at ($(P)!0.8!(R)$);
  \coordinate (QSmark) at ($(Q)!0.9!(S)$);
  \draw[eg mark]
    ($(PRmark)!3pt!90:(R)$) -- ($(PRmark)!3pt!-90:(R)$);
  \draw[eg mark]
    ($(QSmark)!3pt!90:(S)$) -- ($(QSmark)!3pt!-90:(S)$);
  \tkzMarkRightAngle[eg mark,size=0.18](R,T,S)

  \tkzDrawPoints[color=egNavy,fill=egNavy,size=1.6](A,B,C,D,P,Q,R,S)

  \tkzLabelPoints[above left](A)
  \tkzLabelPoints[below left](B)
  \tkzLabelPoints[below right](C)
  \tkzLabelPoints[above right](D)
  \tkzLabelPoints[left](P)
  \tkzLabelPoints[below](Q)
  \tkzLabelPoints[right](R)
  \tkzLabelPoints[above](S)

  \egUseStandardPlate
\end{tikzpicture}
\end{document}

Read the article