Tokyo 2020 Olympic and Paralympic Emblems

The Olympic and Paralympic Games will be held in Tokyo in the summer of 2020. The emblems for them are shown below:

There is the explanation of these emblems on the official page.

Composed of three varieties of rectangular shapes, the design represents different countries, cultures and ways of thinking.It incorporates the message of “unity in diversity”.It also expresses that the Olympic and Paralympic Games seek to promote diversity as a platform to connect the world.

And I have heard that someone who examined a rule in the emblem told that three rectangles that are inscribed in a small regular 12 polygon(dodecagon) is placed around a large regular 24 polygon(icositetragon). I would like to confirm this with Mathematica.

Three rectangles are below.

eBlue = CMYKColor[1, .8, 0, .5]; (*emblem Blue*)
n = 12;
{rp, cp} = {RegularPolygon[n], CirclePoints[n]};
{rpx, cpx} = {RegularPolygon[{1, 0}, n], 
  CirclePoints[{1, 0}, n]}; Grid[{{"small", "middle", 
   "large"}, {Graphics[{EdgeForm[Directive[Thin, Gray]], White, rp, 
     eBlue, Rectangle[cp[[10]], cp[[4]]]}],
   Graphics[{EdgeForm[Directive[Thin, Gray]], White, rpx, eBlue, 
     Rectangle[cpx[[8]], cpx[[2]]]}],
   Graphics[{EdgeForm[Directive[Thin, Gray]], White, rp, eBlue, 
     Rectangle[cp[[11]], cp[[5]]]}]}}, Frame -> All] 

Olympic Emblem

Define colors and rotation angles to be used after this.

oBlue = CMYKColor[1, .37, 0, 0];
oYellow = CMYKColor[0, .34, .91, 0];
oGreen = CMYKColor[1, 0, 1, 0];
oRed = CMYKColor[0, 0.94, 0.65, 0];

angle = Table[i*2 Pi/24, {i, 0, 24}]; 
  • STEP 1

Import an emblem and find the corners.

SetDirectory[NotebookDirectory[]];
emblem = Import["Tokyo_2020_Olympics_emblem.png"];
pad = 120;
i = ImagePad[emblem, pad, Transparent];
isize = (i // ImageDimensions);
pts = Sort@ImageCorners[i, 2, .001];
HighlightImage[i, pts]

Number the corners and display them.

ListPlot[pts -> ToString /@ Range[Length@pts], 
 LabelingFunction -> Above, Axes -> False, AspectRatio -> 1]

Find the radius and center of the regular 24 polygon that surrounds the emblem. Then, try composing the emblem and the regular 24 polygon.

radius24 = EuclideanDistance[pts[[1]], pts[[-1]]]/2;
c = (pts[[1]] + pts[[-1]])/2;
tmp = ImageCrop@
   Graphics[{EdgeForm[Directive[Thick, oBlue]], Transparent, 
     RegularPolygon[c, radius24, 24]},
    ImageSize -> isize - 2 pad];
rp24 = ImageResize[ImagePad[tmp, pad, White], isize];
ImageCompose[rp24, i]

  • STEP 2

Finds the radius and vertex of a regular dodecagon based on the size of a regular 24 polygon.

radius12 = EuclideanDistance[pts[[1]], pts[[4]]]/2;
p = CirclePoints[c, radius12, 12];

Defines a function that fits a rectangle inscribed in a regular dodecagon to a rectangle in the emblem.

fit[f1_, f2_, t1_, t2_, col_] := Module[{dis, deg, rec, rp12x, grp12},
  dis = t1 - f1;(*move*)
  deg = PlanarAngle[{0, 0} -> {f2 - f1, t2 - t1}, "Counterclockwise"]; 
  deg = First@Nearest[angle, deg, 1];(*Angle correction*)
  rec = Rotate[Rectangle[f1 + dis, f2 + dis], deg, t1];(*rotate*)
  rp12x = Rotate[RegularPolygon[c + dis, radius12, 12], deg, t1];
  grp12 = ImageResize[ImageCrop@Graphics[{
       PointSize[.005], Gray, Point[{0, 0}], 
       Point[isize],(*Set markers in the lower left and upper right*)           
       eBlue, rec,
       EdgeForm[Directive[Thick, col]], Transparent, rp12x 
       }, ImageSize -> isize], isize]
  ]

Place small and large rectangles.

s1 = fit[p[[10]], p[[4]], pts[[57]], pts[[70]], oYellow];
s2 = fit[p[[10]], p[[4]], pts[[34]], pts[[43]], oYellow];
s3 = fit[p[[10]], p[[4]], pts[[33]], pts[[49]], oYellow];
s4 = fit[p[[10]], p[[4]], pts[[3]], pts[[2]], oYellow];
s5 = fit[p[[10]], p[[4]], pts[[21]], pts[[4]], oYellow];
s6 = fit[p[[10]], p[[4]], pts[[27]], pts[[9]], oYellow];
l1 = fit[p[[11]], p[[5]], pts[[59]], pts[[69]], oGreen];
l2 = fit[p[[11]], p[[5]], pts[[36]], pts[[48]], oGreen];
l3 = fit[p[[11]], p[[5]], pts[[12]], pts[[18]], oGreen];

ImageMultiply[rp24, s1, s2, s3, s4, s5, s6, l1, l2, l3]

Place the remaining middle rectangles.

px = CirclePoints[c, {radius12, 0}, 12];
m1 = fit[px[[8]], px[[2]], pts[[49]], pts[[57]], oRed];
m2 = fit[px[[8]], px[[2]], pts[[48]], pts[[59]], oRed];
m3 = fit[px[[8]], px[[2]], pts[[18]], pts[[33]], oRed];
m4 = fit[px[[8]], px[[2]], pts[[38]], pts[[24]], oRed];
m5 = fit[px[[8]], px[[2]], pts[[20]], pts[[3]], oRed];
m6 = fit[px[[8]], px[[2]], pts[[21]], pts[[37]], oRed];

olym = ImageMultiply[rp24, s1, s2, s3, s4, s5, s6, l1, l2, l3, m1, m2,
   m3, m4, m5, m6]

Now that we have a third of the emplem, rotate it 120 and 240 degrees to complete the emplem.

ImageMultiply[olym,
 ImageRotate[olym, 2 Pi/3, Full, Masking -> Full, Padding -> White],
 ImageRotate[olym, 4 Pi/3, Full, Masking -> Full, Padding -> White]]

  • STEP 3

This emblem is made up of 45 rectangles of 15 types that are rotated based on 3 types of rectangles.

list = {s1, s2, s3, s4, s5, s6, l1, l2, l3, m1, m2, m3, m4, m5, m6};
imgs = Join[list, 
   ImageRotate[#, 2 Pi/3, Full, Masking -> Full, Padding -> White] & /@
     list, ImageRotate[#, 4 Pi/3, Full, Masking -> Full, 
      Padding -> White] & /@ list];
imgs = Join[list, 
   ImageRotate[#, 2 Pi/3, Masking -> Full, Padding -> White] & /@ 
    list, ImageRotate[#, 4 Pi/3, Masking -> Full, 
      Padding -> White] & /@ list];
olymparts = 
  ImageCrop@ImageCrop[#, 0.99*(# // ImageDimensions)] & /@ imgs;

c = ClusterClassify[olymparts, 15];
olymparts = GatherBy[olymparts, c];

Grid[Prepend[
  Map[ImageResize[#, 50] &, 
   olymparts[[{2, 12, 3, 4, 5, 1, 13, 6, 7, 14, 15, 10, 11, 9, 
      8}]], {2}], {"parts of Olympic emblem", SpanFromLeft, 
   SpanFromLeft}], Frame -> All]

Paralympic Emblem

Repeat the same for the Paralympic emblem.

  • STEP 1
    Import an emblem and find the corners.

     SetDirectory[NotebookDirectory[]];
     emblem = Import["Tokyo_2020_Paralympics_emblem.png"];
     pad = 120;
     i = ImagePad[emblem, pad, Transparent];
     isize = (i // ImageDimensions);
     pts = Sort@ImageCorners[i, 2, .001];
     HighlightImage[i, pts]
    

Number the corners and display them.

ListPlot[pts -> ToString /@ Range[Length@pts], 
 LabelingFunction -> Above, Axes -> False, AspectRatio -> 1]

Find the radius and center of the regular 24 polygon that surrounds the emblem. Then, try composing the emblem and the regular 24 polygon.

radius24 = EuclideanDistance[pts[[1]], pts[[-1]]]/2;
c = (pts[[1]] + pts[[-1]])/2;
tmp = ImageCrop@
   Graphics[{EdgeForm[Directive[Thick, oBlue]], Transparent, 
     RegularPolygon[c, radius24, 24]},
    ImageSize -> isize - 2 pad];
rp24 = ImageResize[ImagePad[tmp, pad, White], isize];
ImageCompose[rp24, i]

  • STEP 2

Finds the radius and vertex of a regular dodecagon based on the size of a regular 24 polygon.

radius24 = EuclideanDistance[pts[[1]], pts[[-1]]]/2;
c = (pts[[1]] + pts[[-1]])/2;
radius12 = EuclideanDistance[pts[[1]], pts[[4]]]/2;
p = CirclePoints[c, radius12, 12];
px = CirclePoints[c, {radius12, 0}, 12];

Place all rectangles.

s1 = fit[p[[10]], p[[4]], pts[[30]], pts[[39]], oYellow]; s2 = 
 fit[p[[10]], p[[4]], pts[[8]], pts[[13]], oYellow];
s3 = fit[p[[10]], p[[4]], pts[[3]], pts[[2]], oYellow];
s4 = fit[p[[10]], p[[4]], pts[[14]], pts[[5]], oYellow];
s5 = fit[p[[10]], p[[4]], pts[[25]], pts[[47]], oYellow];
s6 = fit[p[[10]], p[[4]], pts[[47]], pts[[61]], oYellow];
s7 = fit[p[[10]], p[[4]], pts[[53]], pts[[65]], oYellow];
s8 = fit[p[[10]], p[[4]], pts[[64]], pts[[66]], oYellow];(*later*)
s9 = fit[p[[10]], p[[4]], pts[[42]], pts[[59]], oYellow];
s10 = fit[p[[10]], p[[4]], pts[[57]], pts[[72]], oYellow];(*later*)

l1 = fit[p[[11]], p[[5]], pts[[19]], pts[[32]], oGreen];
l2 = fit[p[[11]], p[[5]], pts[[10]], pts[[23]], oGreen];
l3 = fit[p[[11]], p[[5]], pts[[22]], pts[[29]], oGreen];
l4 = fit[p[[11]], p[[5]], pts[[44]], pts[[51]], oGreen];
l5 = fit[p[[11]], p[[5]], pts[[63]], pts[[70]], oGreen]; (*later*)

m1 = fit[px[[8]], px[[2]], pts[[21]], pts[[30]], oRed];
m2 = fit[px[[8]], px[[2]], pts[[12]], pts[[8]], oRed];
m3 = fit[px[[8]], px[[2]], pts[[18]], pts[[3]], oRed];
m4 = fit[px[[8]], px[[2]], pts[[35]], pts[[14]], oRed];
m5 = fit[px[[8]], px[[2]], pts[[23]], pts[[46]], oRed];
m6 = fit[px[[8]], px[[2]], pts[[29]], pts[[42]], oRed];
m7 = fit[px[[8]], px[[2]], pts[[51]], pts[[57]], oRed];
m8 = fit[px[[8]], px[[2]], pts[[35]], pts[[53]], oRed];
m9 = fit[px[[8]], px[[2]], pts[[52]], pts[[64]], oRed];

para = ImageMultiply[rp24, s1, s2, s3, s4, s5, s6, s7, s9, l1, l2, l3,
   l4, m1, m2, m3, m4, m5, m6, m7, m8, m9]

Now that you have a half of the emblem, reflect it and add three rectangles in the middle to complete the emblem.

ImageMultiply[para, s8, s10, l5, ImageReflect[para, Left]]

  • STEP 3

This emblem is made up of 45 rectangles of 15 types that are rotated based on 3 types of rectangles.

list = {s1, s2, s3, s4, s5, s6, s7, s9, l1, l2, l3, l4, m1, m2, m3, 
   m4, m5, m6, m7, m8, m9};
paraimgs = Join[list, ImageReflect[#, Left] & /@ list, {s8, s10, l5}];
paraparts = 
  ImageCrop@ImageCrop[#, 0.99*(# // ImageDimensions)] & /@ paraimgs;
c = ClusterClassify[paraparts, 15];
paraparts = GatherBy[paraparts, c];

The Olympic emblem and the Paralympic emblem are made of the same 45 rectangles!

{Grid[Prepend[
   Map[ImageResize[#, 50] &, 
    olymparts[[{2, 12, 3, 4, 5, 1, 13, 6, 7, 14, 15, 10, 11, 9, 
      8}]], {2}], {"parts of Olympic emblem", SpanFromLeft, 
    SpanFromLeft}], Frame -> All],
 Grid[Prepend[
   Map[ImageResize[#, 50] &, paraparts, {2}], {"parts of Paralympic", 
    SpanFromLeft, SpanFromLeft}], Frame -> All]}


I am looking forward to Tokyo 2020. Before that, I will enjoy the Rugby World Cup 2019 in Japan this September.

13 Likes

Very neat! Thanks for sharing!

2 Likes

2015-11-02_10-07-11.png

Very nice and interesting - thanks for sharing!

Just a note: With a simple trick one can help the eye. Let corners be the corners of the emblem, then:

order = Last@FindShortestTour[corners];
Show[emblem, Graphics[{Opacity[.1], Red, EdgeForm@Directive[Thickness[.01], Red], Polygon[corners[[order]]]}]]

Outside the polygon there appear only rectangles of type “middle”.

1 Like

On January 6, Tokyo 2020 Official Art Posters were published. The poster of Mr. Asao Tokolo who designed the Tokyo 2020 Olympic and Paralympic emblems is included in those. He said,

I created the designs as a tribute to the Tokyo 1964 designers, who relied on compasses and rulers for their creations, and by imagining what mediums would be employed by designers of the future.

I used his poster as a reference and have tried to make it in a different way than the one above.

R = 1;
line = 2 R Sin[11/12 Pi];
linecol := \!\(\*
TagBox[
StyleBox[
RowBox[{"RGBColor", "[", 
RowBox[{".9", ",", ".9", ",", ".9", ",", 
RowBox[{"RandomReal", "[", 
RowBox[{"{", 
RowBox[{"0.4", ",", "0.5"}], "}"}], "]"}]}], "]"}],
ShowSpecialCharacters->False,
ShowStringCharacters->True,
NumberMarks->True],
FullForm]\);
reccol = White;
backcol = CMYKColor[1, .8, 0, .5];(*emblem Blue*)
thick = Thickness[.001];
(* inside deformed 24 polygon *)
baseTriangle = {EdgeForm[Directive[thick, linecol]], FaceForm[None], 
   Triangle[{{0, 0}, {0, R}, R {Cos[Pi/3], Sin[Pi/3]}}]};
g1 = Table[Rotate[baseTriangle, i Pi/6, {0, 0}], {i, 0, 12}];
baseLine = {thick, linecol, Line[{{0, 0}, {0, R Cos[11 Pi/12]}}]};
g2 = Table[Rotate[baseLine, Pi/12 + i Pi/6, {0, 0}], {i, 0, 11}] ;
(* 3 rectangles *)
rectangle[theta_] := Module[{p0, p1, p2, p3, rhombus},
  p0 = {0, 0};
  p1 = line {Cos[theta], Sin[-theta]};
  p2 = line {2 Cos[theta], 0};
  p3 = line {Cos[theta], Sin[theta]};
  rhombus = {EdgeForm[Directive[thick, linecol]], FaceForm[None], 
    Polygon[{p0, p1, p2, p3}], linecol, Line[{p0, p2}], 
    Line[{p1, p3}], Line[{p0 + p1, p2 + p3}/2], 
    Line[{p1 + p2, p3 + p0}/2],
    PointSize[.008], Point[{p0, p1, p2, p3}]};
  {FaceForm[{reccol, Opacity[RandomReal[{0.2, 0.7}]]}], 
   Rectangle[p1/2, 1/2 (p2 + p3)], rhombus}
  ]
r1 := rectangle[Pi/4];  (*large*)
r2 := rectangle[Pi/6];  (*middle*)
r3 := rectangle[Pi/12];  (*small*)

g3 := {
  (*large rectangel*)
  Translate[Rotate[r1, Pi/2, {0, 0}], {0, R}],
  Translate[Rotate[r1, 0, {0, 0}], 
   line Cos[Pi/4] {-1, 
      0} + (R Cos[Pi/4] Cos[Pi/12] + line/2 Cos[Pi/4]) {-1, 1}],
  Translate[Rotate[r1, Pi/6, {0, 0}], 
   l1 = (R Cos[Pi/12] + line (1 + Sin[Pi/3])) {-Cos[Pi/12], 
      Sin[Pi/12]}],
  (*middle rectangel*)
  Translate[Rotate[r2, Pi/12, {0, 0}], {0, R}],
  Translate[Rotate[r2, -Pi/12, {0, 0}], {0, R + 2 line Sin[Pi/4]}],
  Translate[Rotate[r2, 11 Pi/12, {0, 0}], {0, R}],
  Translate[Rotate[r2, 13 Pi/12, {0, 0}], {0, R + 2 line Cos[Pi/4]}],
  Translate[Rotate[r2, 7 Pi/12, {0, 0}], {-R, 0}],
  Translate[
   Rotate[r2, 
    Pi/12, {0, 0}], {-R Cos[Pi/6] - line (Cos[Pi/4] + Cos[Pi/12]), 
    R Sin[Pi/3] + line Sin[Pi/12]}],
  (*small rectangel*)
  s1 := Translate[
    Rotate[r3, 0, {0, 0}], {0 - line Cos[Pi/12], 
     R + 2 line Sin[Pi/4] + line Sin[Pi/12]}],
  s1,
  Rotate[s1, Pi/6, {0, 0}],
  Translate[
   Rotate[r3, 0, {0, 0}], {0 - line (Cos[Pi/4] + 2 Cos[Pi/12]), 
    R + line Sin[Pi/4]}],
  s2 := Rotate[s1, Pi/2, {0, 0}],
  s2,
  Rotate[s2, Pi/6, l1],
  Rotate[s2, Pi/3, l1]};
g = Graphics[
   {g1, g2, g3,
    Rotate[g3, 2 Pi/3, {0, 0}],
    Rotate[g3, 4 Pi/3, {0, 0}]
    }, Background -> backcol, ImageSize -> 600];

ImageEffect[g, {"GaussianNoise", .1}]
2 Likes