Estruturas poliédricas con pezas entrelazadas II

xoves 18 de outubro do 2018, por Horacio González Diéguez.

Citar

González Diéguez, Horacio. Estruturas poliédricas con pezas entrelazadas II [online]. Santiago de Compostela, España, VHPlab, outubro de 2018 [versión de xullo de 2019] [Consultado el ]. Disponible en Internet: https://www.vhplab.net/spip.php?article370

Como proposta de pequeno proxecto para 1º de Bacharelato, imos fabricar uns patróns de corte para construír estruturas poliédricas con pezas entrelazadas. Para facelo, crearemos un modelo 3D de cada patrón con OpenScad e os imprimiremos nunha impresora 3D. Ademais, durante o proceso, usaremos o programa Geogebra para facer os cálculos xeométricos a partir do trazado de cada patrón.

Na aula informática utilizaremos a distribución de Linux Ubuntu 12.04 LTS, polo que para instalar os programas bastará con executar os seguintes comandos no terminal.

sudo apt-get install geogebra

sudo add-apt-repository -y ppa:openscad/releases

sudo apt-get update

sudo apt-get install openscad

O primeiro patrón que debuxaremos ten forma de triángulo equilátero. Para modelalo con OpenScad partiremos dun sólido primitivo, o cilindro, que permite crear prismas e pirámides en base a polígonos regulares inscritos na circunferencia.

cylinder(2,20,20,$fn=3);

OpenScad sitúa a figura co seu centro na orixe de coordenadas e un dos seus vértices no eixo X. Para debuxar o noso apunte en Geogebra trazaremos unha circunferencia con centro no punto (0,0) e raio un valor r. Despois, dividiremos a circunferencia en carto partes e trazaremos unha paralela ao eixo horizontal pola terceira división. Finalmente, usaremos a ferramenta polígono para unir as dúas interseccións da recta paralela coa circunferencia e a intersección inferior do eixo vertical coa circunferencia. Este trazado dedúcese directamente a partir da construción do triángulo equilátero a partir da altura (páxina 63 do libro de referencia da materia [1]).

Para facer as ranuras en OpenScad utilizaremos outro sólido primitivo, o cubo, que permite crear prismas de base rectangular.

cube([10,10,10],true);

Unha vez creados os sólidos simplemente debemos utilizar unha operación booleana, a diferencia, para combinar ambos sólidos e crear a ranura.

difference() {

}

O seguinte paso consistirá en escoller as medidas axeitadas para o prisma de base rectangular e movelo ata a posición na que queiramos a ranura. Os tres primeiros parámetros do cubo permiten modificar o seu tamaño nos eixos X, Y e Z, basta cambiar os seus valores e actualizar a previsualización coa tecla F5 para modificar a forma da ranura.

A continuación debemos utilizar unha transformación xeométrica, a translación, para mover o prisma. Igual que no cubo, os tres primeiros parámetros da translación son o valor do desprazamento nos eixos X, Y e Z. Para utilizala simplemente debemos usar a función xusto antes de crear o cubo e omitir a separación mediante ’;’. Por exemplo, se queremos que a ranura corte o triángulo equilátero dende a metade, debemos desprazala no eixo Y un valor igual á lonxitude do cubo no eixo Y dividida por 2.

translate([0,10,0])

Agora necesitamos calcular canta distancia debemos mover o prisma no eixo X para facer a ranura na posición indicada nos patróns de corte das estruturas poliédricas. Dita posición está en todos os casos relacionada coa sección áurea polo que nos tocará utilizar un pouco as matemáticas.

En primeiro lugar imos utilizar a trigonometría para calcular o lado do triángulo equilátero a partir da súa altura. Podemos facer os cálculos con Geogebra no noso apunte, utilizando a caixa de entrada. A altura do triángulo será igual a 3/4 partes do diámetro da circunferencia inicial, 2r. O lado será igual a altura dividida polo seno de 60º, pero como Geogebra utiliza por defecto medidas en radiáns, en lugar de escribir 60 na caixa de entrada, faremos referencia ao ángulo do triángulo escribindo α.

PNG - 154.8 KB
Resumo das razóns trigonométricas na Wikipedia

Se analizamos o esquema do patrón de corte, podemos observar como as tres ranuras seccionan o triángulo equilátero perpendicularmente a cada unha das súas tres alturas, a unha distancia medida sobre o lado igual á sección áurea de dito lado. A sección áurea é un trazado sinxelo (páxina 63 do libro de referencia da materia), pero de cara ao posterior traballo con OpenScad, o importante é lembrar a relación existente entre o lado e a súa sección áurea. Supoñendo que o lado valese 2 a sección áurea valería √5 – 1, polo tanto para calcular matematicamente a sección áurea dividiremos o lado entre 2 e multiplicaremos o resultado por √5 – 1.

Finalmente, para calcular a altura á que queda a sección áurea medida respecto do eixo de coordenadas, volveremos a recorrer á trigonometría. Basta multiplicar o seno de 60º polo valor da sección áurea, pero igual que no caso anterior, en lugar de escribir 60 na caixa de entrada, faremos referencia ao ángulo do triángulo escribindo α.

Agora xa temos todos os cálculos que necesitaremos facer con OpenScad no noso apunte en Geogebra, polo que podemos retomar o modelado da figura. O primeiro que faremos será crear variables para cada unha das medidas que usaremos e calcular o seu valor matematicamente.

raio = 20;
diametro = 2 * raio;
altura = diametro * 3 / 4;
lado = altura / sin(60);
seccionAurea = (sqrt(5)-1)*lado/2;
alturaSeccion = seccionAurea * sin(60);

A continuación, simplemente substituiremos os valores numéricos polas súas correspondentes variables.

difference() {
   cylinder(2,raio,raio,$fn=3);
   translate([0,raio/2,0]) cube([1,raio,raio/2],true);    
}

Para situar a ranura á altura correcta, debemos desprazala no eixo X un valor igual a altura da Sección Áurea menos o cuarto de diámetro que xa está desprazada, polo que no primeiro parámetro da función translate haberá que escribir alturaSeccion – diametro/4 en lugar de 0.

Unha vez creada cada ranura imos rotar a figura resultante para facer a seguinte ranura, ata completar o noso patrón de corte. Con todo, en lugar de repetir o código da sección tres veces, imos utilizar un obxecto chamado módulo que nos permite almacenar procesos e repetilos cando queiramos. Para isto primeiro definiremos o noso módulo e despois substituiremos o código do proceso por unha chamada a dito módulo.

module seccion(){
        translate([alturaSeccion-diametro/4,lado/2,0])
                          cube([1,lado,lado], true);
}

difference() {
   cylinder(2,raio,raio,$fn=3);
   seccion();
}

Unha vez creado o módulo seccion e utilizado o por primeira vez, procederemos a rotar a figura utilizando outra transformación xeométrica, a rotación. Esta función é parecida á translación, os seus tres parámetros son o ángulo de rotación nos eixos X, Y e Z, pero en lugar de escribir o bloque de código da figura despois da función omitindo o separador ’;’ deberemos facelo poñéndoo entre corchetes.

rotate ([0, 0, 120]) {
   difference() {
       cylinder(2,raio,raio,$fn=3);
       seccion();
   }
}

Agora simplemente bastará volver a calcular a diferencia cunha nova sección para facer a segunda ranura.

difference() {
   rotate ([0, 0, 120]) {
       difference() {
           cylinder(2,raio,raio,$fn=3);
           seccion();
       }
   }
   seccion();
}

Finalmente, rotaremos a figura unha segunda vez e volveremos a calcular a diferencia cunha nova sección para facer a segunda ranura.

difference() {
   rotate ([0, 0, 120]) {
       difference() {
           rotate ([0, 0, 120]) {
               difference() {
                   cylinder(2,raio,raio,$fn=3);
                   seccion();
               }
           }
           seccion();
       }
   }
   seccion();
}

To be continued...

https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language

Notas

[1DIBUJO TÉCNICO I, CÉSAR CALAVERA OPI E ISABEL JIMÉNEZ RUIZ, Ediciones Paraninfo, Madrid, 2016. (ISBN 9788428336659)