Octaedro

Octaedro en equilibrio sobre un vértice

 

// Octaedro en equilibrio sobre un vértice.

module octaedro_en_equilibrio_sobre_un_vertice(aresta=1){

//Aresta
a=aresta;

// Diagonal
d=sqrt(2)*aresta;

polyhedron(

points=[

[(1/2)*a,(-1/2)*a,0],
[(1/2)*a,(1/2)*a,0],
[(-1/2)*a,(1/2)*a,0],
[(-1/2)*a,(-1/2)*a,0],
[0,0,(1/2)*d],
[0,0,(-1/2)*d]

],

triangles=[

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

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

]

);

}

// Usamos o módulo

octaedro_en_equilibrio_sobre_un_vertice();

Octaedro sobre unha cara

 

// Octaedro sobre unha cara

module octaedro_sobre_unha_cara(aresta=1){

// Lado das caras

l=aresta;

// Altura das caras

hc=(sin(60)*l);

// Altura do octaedro

ho=sqrt(pow(l,2)-pow(((2/3)*hc),2));

polyhedron(

points=[

[(-2/3)*hc,0,0],
[(1/3)*hc,-l/2,0],
[(1/3)*hc,l/2,0],
[(2/3)*hc,0,ho],
[(-1/3)*hc,l/2,ho],
[(-1/3)*hc,-l/2,ho

],

triangles=[

[0,1,2],

[5,4,3],

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

]

);

}

// Usamos o módulo

octaedro_sobre_unha_cara();

Octaedro (con posibilidade de elexir a posición)

Este módulo refírese aos módulos anteriores, polo que é preciso incluílos no arquivo.

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

 

// Octaedro ("sobre unha cara", "en equilibrio sobre un vertice")

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

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

else{

if (posicion=="sobre unha cara"){
octaedro_sobre_unha_cara(aresta);
}

}

}

// Usamos o módulo

octaedro();