It is so complex that I don't even know how to deal with it? Any idea?
Thanks so much.
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It only takes a minute to sign up.
Sign up to join this communityAn option using macros, although there are many manual things to do, and the result is a 2d approach to what is required, it is possible to rotate the icosahedron, thanks to the macro of Tom Bombadil answer in - Tikz:: shift and rotate in 3d?, the theory for the coordinates was consulted in:Truncated Icosahedron in TikZ?
\documentclass[border=20pt]{standalone}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{arrows,3D}
\definecolor{WIRE}{HTML}{002FA7} % Klein Blue
\newcommand{\savedx}{0}
\newcommand{\savedy}{0}
\newcommand{\savedz}{0}
\def\phi{1.618} % Gold radious (1+sqrt(5))/2
\newcommand{\somedrawing} {
% Definig all the coordinates from basic position.
% From theory from Paulo Ney in https://tex.stackexchange.com/q/269108/154390
\coordinate (1) at (0, 1, 3*\phi);
\coordinate (2) at (0, -1, 3*\phi);
\coordinate (3) at (0, 1, -3*\phi);
\coordinate (4) at (0, -1, -3*\phi);
\coordinate (5) at (1, 2+\phi, 2*\phi);
\coordinate (6) at (-1, 2+\phi, 2*\phi);
\coordinate (7) at (1, -2-\phi, 2*\phi);
\coordinate (8) at (1, 2+\phi, -2*\phi);
\coordinate (9) at (-1, -2-\phi, 2*\phi);
\coordinate (10) at (1, -2-\phi, -2*\phi);
\coordinate (11) at (-1, 2+\phi, -2*\phi);
\coordinate (12) at (-1, -2-\phi, -2*\phi);
\coordinate (13) at (\phi, 2, \phi^3);
\coordinate (14) at (-\phi, 2, \phi^3);
\coordinate (15) at (\phi, -2, \phi^3);
\coordinate (16) at (\phi, 2, -\phi^3);
\coordinate (17) at (-\phi, -2, \phi^3);
\coordinate (18) at (\phi, -2, -\phi^3);
\coordinate (19) at (-\phi, 2, -\phi^3);
\coordinate (20) at (-\phi, -2, -\phi^3);
\coordinate (21) at (3*\phi, 0, 1);
\coordinate (22) at (-3*\phi, 0, 1);
\coordinate (23) at (3*\phi, 0, -1);
\coordinate (24) at (-3*\phi, 0, -1);
\coordinate (25) at (2*\phi,1, 2+\phi);
\coordinate (26) at (-2*\phi,1, 2+\phi);
\coordinate (27) at (2*\phi,-1, 2+\phi);
\coordinate (28) at (2*\phi,1, -2-\phi);
\coordinate (29) at (-2*\phi,-1, 2+\phi);
\coordinate (30) at (2*\phi,-1, -2-\phi);
\coordinate (31) at (-2*\phi,1, -2-\phi);
\coordinate (32) at (-2*\phi,-1, -2-\phi);
\coordinate (33) at (\phi^3,\phi, 2);
\coordinate (34) at (-\phi^3,\phi, 2);
\coordinate (35) at (\phi^3,-\phi, 2);
\coordinate (36) at (\phi^3,\phi, -2);
\coordinate (37) at (-\phi^3,-\phi, 2);
\coordinate (38) at (\phi^3,-\phi, -2);
\coordinate (39) at (-\phi^3,\phi, -2);
\coordinate (40) at (-\phi^3,-\phi, -2);
\coordinate (41) at (1,3*\phi, 0);
\coordinate (42) at (-1,3*\phi, 0);
\coordinate (43) at (1,-3*\phi, 0);
\coordinate (44) at (-1,-3*\phi, 0);
\coordinate (45) at (2+\phi,2*\phi,1);
\coordinate (46) at (-2-\phi,2*\phi,1);
\coordinate (47) at (2+\phi,-2*\phi,1);
\coordinate (48) at (2+\phi,2*\phi,-1);
\coordinate (49) at (-2-\phi,-2*\phi,1);
\coordinate (50) at (2+\phi,-2*\phi,-1);
\coordinate (51) at (-2-\phi,2*\phi,-1);
\coordinate (52) at (-2-\phi,-2*\phi,-1);
\coordinate (53) at (2,\phi^3,\phi);
\coordinate (54) at (-2,\phi^3,\phi);
\coordinate (55) at (2,-\phi^3,\phi);
\coordinate (56) at (2,\phi^3,-\phi);
\coordinate (57) at (-2,-\phi^3,\phi);
\coordinate (58) at (2,-\phi^3,-\phi);
\coordinate (59) at (-2,\phi^3,-\phi);
\coordinate (60) at (-2,-\phi^3,-\phi);
%Drawing background vertices.
\foreach \n in {
44,57,43,58,18,49,37,22,24,31,19,3,4,10,52,60,12,20,32,40}{
\node[Vertb node] at (\n) {};
}
% Drawing all group arrows in the background
\foreach \n/\m in {
43/55,58/43/,50/58,
60/52,52/49,49/57,57/44,44/60,
11/19,19/3,3/16,
10/18,18/4,4/20,20/12,12/10,
40/32,32/31,31/39,39/24,24/40,
29/37,37/22,22/34}{
\draw[grob] (\n)--(\m);
}
%Drawing all the relative lines in the background
\foreach \n/\m in {
43/44,9/57,49/37,58/10,30/18,12/60,4/3,19/31,32/20,
52/40,24/34,39/51}{
\draw[relb] (\n)--(\m);
}
%Drawing middle perspective vertices.
\foreach \n in {
7,9,17,29,26,34,46,51,59,11,8,16,28,30,50,47,55}{
\node[Verf node] at (\n) {};
}
% Drawing all group arrows
\foreach \n/\m in {
55/47,47/50,
15/7,7/9,9/17,17/2,2/15,
27/25,25/33,33/21,21/35,35/27,
30/38,38/23,23/36,36/28,28/30,
48/45,45/53,53/41,41/56,56/48,
16/8,8/11,
5/13,13/1,1/14,14/6,6/5,
34/26,26/29,
42/54,54/46,46/51,51/59,59/42}{
\draw[gro] (\n)--(\m);
}
%Drawing all the relative lines
\foreach \n/\m in {
17/29,2/1,26/14,13/25,27/15,5/53,33/45,47/35,55/7,21/23,38/50,
36/48,28/16,8/56,11/59,41/42,54/6,34/46}{
\draw[rel] (\n)--(\m);
}
%Drawing front vertices.
\foreach \n in {
27,35,21,38,23,36,48,56,41,59,42,54,6,14,1,2,15,33,45,53,5,13,25}{
\node[Verf node] at (\n) {};
}
% %use to identify all the nodes in drawing lines process
% \foreach \n in {1,...,60}{
% \node[circle,fill=blue!20] at (\n) {\Large \n};
% }
}
% Tom Bombadil macro https://tex.stackexchange.com/a/67588/154390
\newcommand{\rotateRPY}[4][0/0/0]% point to be saved to \savedxyz, roll, pitch, yaw
{ \pgfmathsetmacro{\rollangle}{#2}
\pgfmathsetmacro{\pitchangle}{#3}
\pgfmathsetmacro{\yawangle}{#4}
% to what vector is the x unit vector transformed, and which 2D vector is this?
\pgfmathsetmacro{\newxx}{cos(\yawangle)*cos(\pitchangle)}% a
\pgfmathsetmacro{\newxy}{sin(\yawangle)*cos(\pitchangle)}% d
\pgfmathsetmacro{\newxz}{-sin(\pitchangle)}% g
\path (\newxx,\newxy,\newxz);
\pgfgetlastxy{\nxx}{\nxy};
% to what vector is the y unit vector transformed, and which 2D vector is this?
\pgfmathsetmacro{\newyx}{cos(\yawangle)*sin(\pitchangle)*sin(\rollangle)-sin(\yawangle)*cos(\rollangle)}% b
\pgfmathsetmacro{\newyy}{sin(\yawangle)*sin(\pitchangle)*sin(\rollangle)+ cos(\yawangle)*cos(\rollangle)}% e
\pgfmathsetmacro{\newyz}{cos(\pitchangle)*sin(\rollangle)}% h
\path (\newyx,\newyy,\newyz);
\pgfgetlastxy{\nyx}{\nyy};
% to what vector is the z unit vector transformed, and which 2D vector is this?
\pgfmathsetmacro{\newzx}{cos(\yawangle)*sin(\pitchangle)*cos(\rollangle)+ sin(\yawangle)*sin(\rollangle)}
\pgfmathsetmacro{\newzy}{sin(\yawangle)*sin(\pitchangle)*cos(\rollangle)-cos(\yawangle)*sin(\rollangle)}
\pgfmathsetmacro{\newzz}{cos(\pitchangle)*cos(\rollangle)}
\path (\newzx,\newzy,\newzz);
\pgfgetlastxy{\nzx}{\nzy};
% transform the point given by #1
\foreach \x/\y/\z in {#1}
{ \pgfmathsetmacro{\transformedx}{\x*\newxx+\y*\newyx+\z*\newzx}
\pgfmathsetmacro{\transformedy}{\x*\newxy+\y*\newyy+\z*\newzy}
\pgfmathsetmacro{\transformedz}{\x*\newxz+\y*\newyz+\z*\newzz}
\xdef\savedx{\transformedx}
\xdef\savedy{\transformedy}
\xdef\savedz{\transformedz}
}
}
\tikzset{RPY/.style={x={(\nxx,\nxy)},y={(\nyx,\nyy)},z={(\nzx,\nzy)}}}
\begin{document}
\begin{tikzpicture}[% Sets all the styles
x={(-0.86in, -0.5in)}, y = {(0.86in, -0.5in)}, z = {(0, 1in)},
scale = 1,
Verf node/.style = {circle,fill = WIRE!50, draw,ultra thick, minimum size = 1.5cm},
Vertb node/.style = {circle,fill = WIRE!25, draw=black!50,thick, minimum size = 1cm},
gro/.style = {line width=7pt, red,>=triangle 60,->,shorten >= 1cm, shorten <= 1cm},
grob/.style = {line width=7pt,red!25,>=triangle 60,->,shorten >= .8cm, shorten <= .8cm},
rel/.style = {line width=7pt,WIRE,shorten >= 1cm, shorten <= 1cm },
relb/.style = { line width=7pt,WIRE!30,shorten >= .8cm, shorten <= .8cm }
]
\rotateRPY{30}{10}{10} % 30-10-10
\begin{scope}[RPY]
\somedrawing
\end{scope}
\end{tikzpicture}
\end{document}
\phi
but using some other name for the macro of the angle since otherwise this code may clash with some basic uses of \phi
in formulae? BTW, how did you find out which vertices are in the back? Did you do it by hand or did you use some automatic method? In the latter case, it would be great if you could describe it since there are many other Cayley diagrams that could then be drawn analogously.
\r
; As for finding which vertices go back, I found them manually, there are some lines of code that list the vertices, the vertices from 1 to 20 define at least 3 faces, rotating in 3D can be confirmed according to the displacement which goes in front or behind (using TikzEdt semi WYSIWYG editor), I chose a face that is completely oriented forward and draw the red arrows in a clockwise direction, since this can be completed all step by step, visually.
May 7, 2018 at 1:20
\r
but something more complicated such that it does not interfere with other definitions. And maybe do the definition inside the \somedrawing
group, possibly with \pgfmathsetmacro
, such that it becomes local, and thus has less chance of interfering with other macros.
Here is a proposal. I started with these examples but then I switched gear and got the vertices, edges and faces from Mathematica because that allowed me to draw the arrows on isolated surfaces only. You need to compile with -shell-escape
.
\documentclass[border=3.14mm]{standalone}
\usepackage{asypictureB}
\begin{document}
\begin{asypicture}{name=CayleyA5}
import solids;
import three;
triple vertices[];
vertices[0]=(-0.16245984811645317, -2.118033988749895, 1.2759762125280598);
vertices[1]=(-0.16245984811645317, 2.118033988749895, 1.2759762125280598);
vertices[2]=(0.16245984811645317, -2.118033988749895, -1.27597621252806);
vertices[3]=(0.16245984811645317, 2.118033988749895, -1.27597621252806);
vertices[4]=(-0.2628655560595668, -0.8090169943749473, -2.327438436766327);
vertices[5]=(-0.2628655560595668, -2.4270509831248424, -0.42532540417601994);
vertices[6]=(-0.2628655560595668, 0.8090169943749475, -2.327438436766327);
vertices[7]=(-0.2628655560595668, 2.4270509831248424, -0.42532540417601994);
vertices[8]=(0.2628655560595668, -0.8090169943749473, 2.327438436766327);
vertices[9]=(0.2628655560595668, -2.4270509831248424, 0.42532540417601994);
vertices[10]=(0.2628655560595668, 0.8090169943749475, 2.327438436766327);
vertices[11]=(0.2628655560595668, 2.4270509831248424, 0.42532540417601994);
vertices[12]=(0.6881909602355868, -0.5, -2.327438436766327);
vertices[13]=(0.6881909602355868, 0.5, -2.327438436766327);
vertices[14]=(1.2139220723547204, -2.118033988749895, 0.42532540417601994);
vertices[15]=(1.2139220723547204, 2.118033988749895, 0.42532540417601994);
vertices[16]=(-2.0645728807067605, -0.5, 1.2759762125280598);
vertices[17]=(-2.0645728807067605, 0.5, 1.2759762125280598);
vertices[18]=(-1.3763819204711736, -1., 1.8017073246471935);
vertices[19]=(-1.3763819204711736, 1., 1.8017073246471935);
vertices[20]=(-1.3763819204711736, -1.6180339887498947, -1.27597621252806);
vertices[21]=(-1.3763819204711736, 1.618033988749895, -1.27597621252806);
vertices[22]=(-0.6881909602355868, -0.5, 2.327438436766327);
vertices[23]=(-0.6881909602355868, 0.5, 2.327438436766327);
vertices[24]=(1.3763819204711736, -1., -1.8017073246471935);
vertices[25]=(1.3763819204711736, 1., -1.8017073246471935);
vertices[26]=(1.3763819204711736, -1.6180339887498947, 1.2759762125280598);
vertices[27]=(1.3763819204711736, 1.618033988749895, 1.2759762125280598);
vertices[28]=(-1.7013016167040798, 0., -1.8017073246471935);
vertices[29]=(1.7013016167040798, 0., 1.8017073246471935);
vertices[30]=(-1.2139220723547204, -2.118033988749895, -0.42532540417601994);
vertices[31]=(-1.2139220723547204, 2.118033988749895, -0.42532540417601994);
vertices[32]=(-1.9641671727636467, -0.8090169943749473, -1.27597621252806);
vertices[33]=(-1.9641671727636467, 0.8090169943749475, -1.27597621252806);
vertices[34]=(2.0645728807067605, -0.5, -1.27597621252806);
vertices[35]=(2.0645728807067605, 0.5, -1.27597621252806);
vertices[36]=(2.2270327288232132, -1., -0.42532540417601994);
vertices[37]=(2.2270327288232132, 1., -0.42532540417601994);
vertices[38]=(2.3894925769396664, -0.5, 0.42532540417601994);
vertices[39]=(2.3894925769396664, 0.5, 0.42532540417601994);
vertices[40]=(-1.1135163644116066, -1.8090169943749475, 1.2759762125280598);
vertices[41]=(-1.1135163644116066, 1.8090169943749475, 1.2759762125280598);
vertices[42]=(1.1135163644116066, -1.8090169943749475, -1.27597621252806);
vertices[43]=(1.1135163644116066, 1.8090169943749475, -1.27597621252806);
vertices[44]=(-2.3894925769396664, -0.5, -0.42532540417601994);
vertices[45]=(-2.3894925769396664, 0.5, -0.42532540417601994);
vertices[46]=(-1.6392474765307403, -1.8090169943749475, 0.42532540417601994);
vertices[47]=(-1.6392474765307403, 1.8090169943749475, 0.42532540417601994);
vertices[48]=(1.6392474765307403, -1.8090169943749475, -0.42532540417601994);
vertices[49]=(1.6392474765307403, 1.8090169943749475, -0.42532540417601994);
vertices[50]=(1.9641671727636467, -0.8090169943749473, 1.2759762125280598);
vertices[51]=(1.9641671727636467, 0.8090169943749475, 1.2759762125280598);
vertices[52]=(0.85065080835204, 0., 2.327438436766327);
vertices[53]=(-2.2270327288232137, -1., 0.42532540417601994);
vertices[54]=(-2.2270327288232137, 1., 0.42532540417601994);
vertices[55]=(-0.8506508083520399, 0., -2.327438436766327);
vertices[56]=(-0.5257311121191336, -1.6180339887498947, -1.8017073246471935);
vertices[57]=(-0.5257311121191336, 1.618033988749895, -1.8017073246471935);
vertices[58]=(0.5257311121191336, -1.6180339887498947, 1.8017073246471935);
vertices[59]=(0.5257311121191336, 1.618033988749895, 1.8017073246471935);
int edge[][] ={{1, 10}, {1, 41}, {1, 59}, {2,
12}, {2, 42}, {2, 60}, {3, 6}, {3,
43}, {3, 57}, {4, 8}, {4, 44}, {4,
58}, {5, 13}, {5, 56}, {5, 57}, {6,
10}, {6, 31}, {7, 14}, {7, 56}, {7,
58}, {8, 12}, {8, 32}, {9, 23}, {9,
53}, {9, 59}, {10, 15}, {11, 24},
{11, 53}, {11, 60}, {12, 16}, {13,
14}, {13, 25}, {14, 26}, {15, 27},
{15, 49}, {16, 28}, {16, 50}, {17,
18}, {17, 19}, {17, 54}, {18, 20},
{18, 55}, {19, 23}, {19, 41}, {20,
24}, {20, 42}, {21, 31}, {21, 33},
{21, 57}, {22, 32}, {22, 34}, {22,
58}, {23, 24}, {25, 35}, {25, 43},
{26, 36}, {26, 44}, {27, 51}, {27,
59}, {28, 52}, {28, 60}, {29, 33},
{29, 34}, {29, 56}, {30, 51}, {30,
52}, {30, 53}, {31, 47}, {32, 48},
{33, 45}, {34, 46}, {35, 36}, {35,
37}, {36, 38}, {37, 39}, {37, 49},
{38, 40}, {38, 50}, {39, 40}, {39,
51}, {40, 52}, {41, 47}, {42, 48},
{43, 49}, {44, 50}, {45, 46}, {45,
54}, {46, 55}, {47, 54}, {48, 55}};
int isolatedfaces[][] = {{53, 11, 24, 23, 9},
{51, 39, 40, 52, 30},
{60, 28, 16, 12, 2},
{20, 42, 48, 55, 18},
{19, 17, 54, 47, 41},
{1, 10, 15, 27, 59},
{36, 26, 44, 50, 38},
{4, 58, 22, 32, 8}, {34, 29, 33,
45, 46}, {21, 57, 3, 6, 31},
{37, 49, 43, 25, 35},
{13, 5, 56, 7, 14}};
// comment the following line for OpenGl
settings.render=5;
settings.tex="pdflatex";
settings.outformat="pdf"; // for opacity
size(10cm);
currentprojection=perspective(7,6,4); //if you want perspectivic look
//currentprojection=orthographic(1,1,0.5); //if you want othographic look
currentlight=(1,1,2);
// currentlight=nolight;
for(int i=0;i<60;++i)
draw(shift(vertices[i])*scale3(0.1)*unitsphere,blue+opacity(.7));
for(int i=0;i<90;++i)
draw(vertices[edge[i][0]-1] -- vertices[edge[i][1]-1]);
for(int i=0;i<isolatedfaces.length;++i)
{
draw(subpath(vertices[isolatedfaces[i][0]-1] -- vertices[isolatedfaces[i][1]-1],0.1,0.9),red+ linewidth(2.0pt),Arrow3(DefaultHead3));
draw(subpath(vertices[isolatedfaces[i][1]-1] -- vertices[isolatedfaces[i][2]-1],0.1,0.9),red+ linewidth(2.0pt),Arrow3(DefaultHead3));
draw(subpath(vertices[isolatedfaces[i][2]-1] -- vertices[isolatedfaces[i][3]-1],0.1,0.9),red+ linewidth(2.0pt),Arrow3(DefaultHead3));
draw(subpath(vertices[isolatedfaces[i][3]-1] -- vertices[isolatedfaces[i][4]-1],0.1,0.9),red+ linewidth(2.0pt),Arrow3(DefaultHead3));
draw(subpath(vertices[isolatedfaces[i][4]-1] -- vertices[isolatedfaces[i][0]-1],0.1,0.9),red+ linewidth(2.0pt),Arrow3(DefaultHead3));
}
\end{asypicture}
\end{document}