Icosaedro

Icosaedro en equilibrio sobre un vértice

 

// Icosaedro en equilibrio sobre un vértice.

module icosaedro_en_equilibrio_sobre_un_vertice(aresta=1){

// Aresta

a=aresta;

// Cálculo da altura da figura (tramos inferior e superior máis tramo intermedio).

// Tramos superior e inferior (coincidentes coa magnitude da proxección horizontal das arestas perimetrais na planta da figura).

h1=(a/2)/cos(18);

//Tramo intermedio (coincidente coa magnitude da proxección horizontal das arestas radiais na planta da figura).

h2=(a/2)/sin(36);

// Altura total.

h=2*h1+h2;

// Cotas

c1=(-1/2)*h;
c2=(-1/2)*h2;
c3=(1/2)*h2;
c4=(1/2)*h;

// Construción da figura

polyhedron(

points=[

[0,0,c1], //0

[h2,0,c2], //1
[(1/2)*h1,h2*cos(18),c2], //2
[-h2*cos(36),(1/2)*a,c2], //3
[-h2*cos(36),(-1/2)*a,c2], //4
[(1/2)*h1,-h2*cos(18),c2], //5

[-h2,0,c3], //6
[(-1/2)*h1,-h2*cos(18),c3], //7
[h2*cos(36),(-1/2)*a,c3], //8
[h2*cos(36),(1/2)*a,c3], //9
[(-1/2)*h1,h2*cos(18),c3], //10

[0,0,c4] //11

],

triangles=[

[0,1,2], [0,2,3], [0,3,4], [0,4,5], [0,5,1],

[1,8,9], [2,9,10], [3,10,6], [4,6,7], [5,7,8],

[6,4,3], [7,5,4], [8,1,5], [9,2,1], [10,3,2],

[11,6,10], [11, 10,9], [11, 9,8], [11,8,7], [11,7,6]

]

);

}

// Usamos o módulo

icosaedro_en_equilibrio_sobre_un_vertice();

 

 

Icosaedro (con posibilidade de elexir a posición)

Este módulo refírese ao módulo anterior, polo que é preciso incluílo no arquivo.

Reseñamos aquí a parte do código específica para realizar a elección.

 

//Icosaedro

module icosaedro(aresta=1, posicion="en equilibrio sobre un vertice"){

if(posicion=="en equilibrio sobre un vertice"){
icosaedro_en_equilibrio_sobre_un_vertice(aresta);
}

else{

if(posicion=="sobre unha cara"){
rotate([0,-36,0])
icosaedro_en_equilibrio_sobre_un_vertice(aresta);
}

}

}

// Usamos o módulo

icosaedro();