0

Is there some easy way to draw this figure on LaTex using any method?

https://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/SO10.svg/2560px-SO10.svg.png

enter image description here

Many thanks to share any comments.

3

It is straightforward but very tedious to draw this. This is to give you a start. The single triangular shape is stored in a pic called kite and a group of three of those in a pic called tkite. You can move and rotate the full group and colorize and rotate the single kites with pgf keys. The same thing applies to circle, which are the circular shapes. Here is an example.

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[line join=round,pics/kite/.style={code={
  \draw[pic actions] 
   (120:0.2) -- (0:0.2) -- (-120:0.2) -- ++ (150:{0.2*sin(120)})
   -- ++ (30:{0.2*sin(120)})  -- ++ (150:{0.2*sin(120)})
   -- ++ (30:{0.2*sin(120)})
   -- cycle (120:0.2)  -- ++ (-90:{0.2*sin(120)});}},
   pics/circ/.style={code={\draw[pic actions] (0,0) circle[radius=0.12];}},
   pics/tkite/.style={code={\tikzset{#1}
   \path foreach \Kite in {1,2,3}
   {(-60+\Kite*120:0.4) pic[kite \Kite/.try,kites/.try]{kite}};}},
   pics/tcirc/.style={code={\tikzset{#1}
   \path foreach \Circ in {1,2,3}
   {(-60+\Circ*120:0.4) pic[circ \Circ/.try,circs/.try]{circ}};}}]
  \path (60:1.5) pic{tkite={kite 1/.style={fill=red},kite 2/.style={fill=blue!30},
  kite 3/.style={fill=green},kites/.style={rotate=-30}}}
   pic{tcirc={circ 1/.style={fill=red},circ 2/.style={fill=blue!30},
  circ 3/.style={fill=green}}}
  ++ (-45:2) pic[rotate=150]{tkite={kite 1/.style={fill=orange},kite 2/.style={fill=blue!60},
  kite 3/.style={fill=green},kites/.style={rotate=30}}}
   pic[rotate=150]{tcirc={circ 1/.style={fill=orange},circ 2/.style={fill=blue!60},
  circ 3/.style={fill=green}}};
\end{tikzpicture}
\end{document}

enter image description here

For instance, the bit

  ++ (-45:2) pic[rotate=150]{tkite={kite 1/.style={fill=orange},kite 2/.style={fill=blue!60},
  kite 3/.style={fill=green},kites/.style={rotate=30}}}

indicates that the lower right group is rotated by 150 degrees, each individual shape is rotated by 30 degrees around their center, and the first one is filled orange, the second bone blue and the last one green. Repeating this will allow you to complete the diagram. Of course, if there is a theory behind the orientation and colors of the groups and their elements, you may draw the thing programmatically.

Going on manually, and adding one pic tt that combines the tkite and tcirc pics, it is straightforward to create one row.

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[line join=round,pics/kite/.style={code={
  \draw[pic actions] 
   (120:0.2) -- (0:0.2) -- (-120:0.2) -- ++ (150:{0.2*sin(120)})
   -- ++ (30:{0.2*sin(120)})  -- ++ (150:{0.2*sin(120)})
   -- ++ (30:{0.2*sin(120)})
   -- cycle (120:0.2)  -- ++ (-90:{0.2*sin(120)});}},
   pics/circ/.style={code={\draw[pic actions] (0,0) circle[radius=0.12];}},
   pics/tkite/.style={code={\tikzset{#1}
   \path foreach \Kite in {1,2,3}
   {(-60+\Kite*120:0.4) pic[elm \Kite/.try,kites/.try]{kite}};}},
   pics/tcirc/.style={code={\tikzset{#1}
   \path foreach \Circ in {1,2,3}
   {(-60+\Circ*120:0.4) pic[elm \Circ/.try,circs/.try]{circ}};}},
   pics/tt/.style={code={\path pic[transform shape]{tkite={#1}}   pic[transform shape]{tcirc={#1}};}}]
% 
  \draw[dashed,gray,-stealth,semithick] (-150:5) -- (30:5);
  \draw[dashed,gray,-stealth,semithick] (-60:5) -- (120:5);
  \draw[dashed,gray,-stealth,semithick] (-60:5) -- (120:4);
  \draw foreach \X in {0,60,...,300}  
  {(\X:0.4) pic[fill=blue!30]{circ}};
  \path (30:2)   
  ++ (120:5) pic[rotate=30]{tcirc={elm 1/.style={fill=red},elm 2/.style={fill=blue!30},
  elm 3/.style={fill=green}}}
  ++ (-60:2) pic[rotate=30,fill=yellow]{kite}
  ++ (-60:2) pic{tt={elm 1/.style={fill=red},elm 2/.style={fill=blue!30},
  elm 3/.style={fill=green},kites/.style={rotate=-30}}}
  ++ (-60:2) pic[rotate=150]{tt={elm 1/.style={fill=orange},elm 2/.style={fill=blue!60},
  elm 3/.style={fill=green},kites/.style={rotate=-120}}}
  ++ (-60:2) pic[rotate=-30,fill=gray]{kite}
  ++ (-60:2) pic[rotate=210]{tcirc={elm 1/.style={fill=green},elm 2/.style={fill=blue!60},
  elm 3/.style={fill=orange}}};
\end{tikzpicture}
\end{document}

enter image description here

  • An excellent answer. – Sveinung Sep 23 '19 at 8:55

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.