Funcións:
Podemos utilizar unha función para establecer dimensións ou transformacións. No seguinte exemplo usaremos a función coseno.
// Función coseno nx=180; for(i=[0:1:nx]) { translate( [i, 0, 0] ) square( [1, 11+10*cos(10*i)], center=false ); } Tamén poderiamos escribir a función e despois chamala: // Función seno nx=180; function y(x) = 11+10*sin(10*x); for(i=[0:1:nx]) { translate( [i, 0, 0] ) square( [1, y(i)] ); }
|
![]()
|
Funcións paramétricas en X e en Y:
Imos utilizar a funcións matemáticas para xerar unha figura. O que facemos é unir círculos con hull() que se van trasladando unha distancia p seguindo a función definida con anterioridade.
Neste exemplo utilizamos a función do corazón.
// corazón w= 2; // espesor e=0.5; // para escalar a función p=1; // paso res=12; // resolución h=2; // altura function x(t) = 50*pow(sin(t),3); function y(t) = 40*cos(t)-15*cos(2*t)-6*cos(3*t)-3*cos(4*t); linear_extrude(h) for(i=[-180:1:180]) { hull(){ translate([e*x(i),e*y(i),0]) circle(d=w,$fn=res); translate([e*x(i+p),e*y(i+p),0]) circle(d=w,$fn=res); } } Proba con outras funcións. Por exemplo Lissajous: // parámetros de lissajous (escala a función e=30;) A = 2; B = 3; Phase = 30; // Phase in degrees E = 1.618; // Eccentricity 1->cadrado, 1.618-> golden ratio function x(t) = E*cos(A*t+Phase); function y(t) = sin(B*t);
|
![]() |
Funcións paramétricas en X, Y e Z:
Imos debuxar un resorte. Facemos o mesmo que antes, pero trasladando unha esfera tamén no eixe Z. (F5!!)
// resorte w= 5; // diámetro esfera p=1; // paso res=12; // resolución n=4; // voltas A=40; C=0.03; function x(t) = A*sin(t); function y(t) = A*cos(t); function z(t) = C*t; for(i=[0:1:360*n]) { hull(){ translate([x(i),y(i),z(i)]) sphere(r=w/2,$fn=res); translate([x(i+p),y(i+p),z(i+p)]) sphere(r=w/2,$fn=res); } }
|
![]()
|
Curvar unha función:
Imos partir dunha función, por exemplo esta: y(t)= 1+sin(s*f*t)*cos(c*f*t);
// Función sin-cos w= 2; // espesor p=1; // paso res=12; // resolución // parámetros función f=6; // frecuencia s=1; // amplitude seno c=2; // amplitude coseno e=20; // escala function f(t) = 1+sin(s*f*t)*cos(c*f*t); for(i=[0:1:360]) { hull(){ translate([i,e*f(i),0]) circle(d=w,$fn=res); translate([(i+p),e*f(i+p),0]) circle(d=w,$fn=res); } }
|
![]() ![]()
|
Agora imos curvala facendo un aro. Para iso creamos dúas funcións gx(t) e gy(t), desprazando cada punto a distancia do radio do aro e cos(t) no eixe X e sin(t) no eixe Y.
// Función sin-cos en aro w= 1; // espesor p=1; // paso res=12; // resolución // parámetros función f=10; // frecuencia s=1; // amplitude seno c=2; // amplitude coseno e=4; // escala // parámetros aro r=20; // radio do aro function f(t) = 1+sin(s*f*t)*cos(c*f*t); function gx(t) = (r+e*f(t))*cos(t); function gy(t) = (r+e*f(t))*sin(t); for(i=[0:1:360]) { hull(){ translate([gx(i),gy(i),0]) circle(d=w,$fn=res); translate([gx(i+p),gy(i+p),0]) circle(d=w,$fn=res); } }
|
![]() ![]() ![]() |
Agora queda extruír. Se queres facer un brazalete, parte do aro e extrúe a altura que queiras.
Tamén podemos facer un vaso para unha planta o un lapiceiro extruíndo como vimos na páxina de “extrusión de polígonos”
linear_extrude( height=80, twist=90, $fn = 360, scale=1.5) for(i=[0:1:360]) { hull(){ translate([gx(i),gy(i),0]) circle(d=w,$fn=res); translate([gx(i+p),gy(i+p),0]) circle(d=w,$fn=res); circle(d=w,$fn=res); } }
|
![]() |
Propostas:
Colgante:
Utiliza calquera destas funcións e modifica os parámetros ata que atopes unha figura que che guste. Despois engade unha argola. Para engadir o aro pensa en cal sería o valor máximo da función no eixe x, e fai a translación en función dese parámetro.
// Hipotrocoides: a=30; b=15; n=6; function x(t) = (a*cos(t) + b*cos(a*t/n)); function y(t) = (a*sin(t) - b*sin(a*t/n));
|
//Pétalos n=6; // voltas A=25; // amplitude function x(t) = A*cos(n*t)*cos(t); function y(t) = A*cos(n*t)*sin(t); |
Brazalete:
Deseña o teu brazalete modificando os parámetros de amplitude e indicando coa variable n o número de cristas:
// función seno en z x(t) = 50*sin(t); y(t) = 50*cos(t); z(t) = 25*sin(n*t); |
// solenoide tórico x(t) = (R+r*cos(n*t))*cos(t); y(t) = (R+r*cos(n*t))*sin(t); z(t) = r*sin(n*t); |
Maceta
A partir dunha función que che guste crea unha maceta ou un lapiceiro extruíndo.
Aneis de Borromeo
Rota para conseguir uns aneis de Borromeo
// anel: a=10; b=7; function x(t) = a*cos(t); function y(t) = b*sin(t); function z(t) = 0; |
![]() |