Showing posts with label unit functions. Show all posts
Showing posts with label unit functions. Show all posts

Wednesday, October 11, 2017

0 - 1 Remapping Functions: Compressor / Expander / Biramp

/* remapping functions */

v1=rnd();v2=rnd(); 

for(i=[-0:1/160:1])translate([i,0])square([1/160,  ((  comp(i,v1,v2)))]);
    function comp(i,c=0.5,s=0.75)=i<c? ramp(i,0,c,0,s) :ramp(i,c,1,s,1) ;
    function ramp(v,bi1=1/3,bi2=2/3,start=1/3, end=2/3) = 
        let(b1=min(bi1,bi2),b2=max(bi1,bi2))
        v<=b1?start:v<=b2?lerp(start,end,(v-b1)/(b2-b1))    :end;
     function lerp(start, end, bias) = (end * bias + start * (1 - bias));

function rnd(a = 1, b = 0, s = []) = 
  s == [] ? 
   (rands(min(a, b), max(   a, b), 1)[0]) 
  : 
   (rands(min(a, b), max(a, b), 1, s)[0])
  ; 



Monday, October 9, 2017

0 - 1 Remapping Functions: Map / BiSignMap / InfMap

/* remapping functions */


for(i=[-1:1/160:1])translate([bisignmap(i),0])square([1/160,  map(infmap(i*12) )   ]);

// Map takes a number in some range 
// and remaps it into the desired range
function  map(  value,istart=-1, istop=1, ostart=0, ostop=1) =
ostart + (ostop - ostart) * ((value - istart) / (istop - istart));

// BiSignMap takes a number in the range -1 - 1
// and remaps it into the range 0 - 1.
function bisignmap(i)=(i+1)/2;

// InfMap takes a number in the range -inf - inf
// and remaps it into the range -1 - 1 . 
function infmap(i)=max(0,1-(1/(abs(i)+1)))*sign(i);

Saturday, October 7, 2017

0 - 1 Remapping Functions: Smooth Step 2

/* remapping functions */


for(i=[-0:1/160:1])translate([i,0])square([1/160,   ( (   smooth2(i) )) ]);
     function smooth2(x,k=5,n=4) =1- (exp( -k*pow(x,n) ));
 

Compared to smooth step

Thursday, October 5, 2017

0 - 1 Remapping Functions: Power Smooth / Inverse Power Smooth

/* remapping functions */



for(i=[-0:1/160:1])translate([i,0])square([1/160,   ( (   powersmooth(i) )) ]);
     function powersmooth(x) =       ((x+ x-ipowersmooth(x))-0.5)*0.9+0.5 ;

for(i=[-0:1/160:1])translate([i,0])square([1/160,   ( (   ipowersmooth(i) )) ]);
    function ipowersmooth(x) =  clamp(pow(x-0.5,3)*4+0.5);
    function clamp(a, b = 0, c = 1) = min(max(a, b), c);
 


Tuesday, October 3, 2017

0 - 1 Remapping Functions: Powers 10 to -10

/* remapping functions */



for(i=[-0:1/160:1])translate([i,0])square([1/160,   ( (   power(i,10) )) ]);
     function power(x,n) = n<0?pow(x,1/abs(min(-1,n-1) )):pow(x,max(1,n+1))   ;


for(i=[-0:1/160:1])translate([i,0])square([1/160,   ( (   power(i,-10) )) ]);
     function power(x,n) = n<0?pow(x,1/abs(min(-1,n-1) )):pow(x,max(1,n+1))   ;
 


Sunday, October 1, 2017

0 - 1 Remapping Functions: Multiple Smooth Steps

/* remapping functions */


for(i=[-0:1/160:1])translate([i,0])square([1/160,   (smooths(  smooth(i),3 )) ]);
    function smooths(v,steps) =smooth( smooth(mods(v,steps) ))/steps+mstep(v,steps);
    function smooth (a) =let (b = clamp(a))(b * b * (3 - 2 * b));
    function clamp(a, b = 0, c = 1) = min(max(a, b), c);
    function mstep(v,steps=3) = (floor(v*steps)/steps );
    function mods(v,steps=3) = ( (v*steps)%1);
 


Friday, September 29, 2017

0 - 1 Remapping Functions: Inverse Cosine-Wave

/* remapping functions */


for(i=[-0:1/160:1])translate([i,0])square([1/160,    (icosw(  (i))) ]);
     function icosw(i)=-cos(i*360)/2+0.5+i;
 

 

Monday, September 25, 2017

0 - 1 Remapping Functions: Cosine-Wave

/* remapping functions */


for(i=[-0:1/160:1])translate([i ,  min(0,cosw(i))])
                 square([1/160,   abs(cosw(  (i))) ]);
    function cosw(i)=cos(i*360)/2 -0.5+i;
 

 

Saturday, September 23, 2017

0 - 1 Remapping Functions: Inverse Sine-Wave

/* remapping functions */


for(i=[-0:1/160:1])translate([i,  min(0,isinw(i))])
                square([1/160,   abs(isinw(  (i))) ]);
    function isinw(i)=gauss(i)-sin(i*360)/2;
 
    function gauss(x) =       x + (x - smooth(x));
    function smooth (a) =let (b = clamp(a))(b * b * (3 - 2 * b));
    function clamp(a, b = 0, c = 1) = min(max(a, b), c);

 

Thursday, September 21, 2017

0 - 1 Remapping Functions: Sine-Wave

/* remapping functions */


for(i=[-0:1/160:1])translate([i,0])square([1/160,    (sinw(  (i))) ]);
    function sinw(i)=sin(i*360)/2+smooth(i);
    function gauss(x) =       x + (x - smooth(x));
    function smooth (a) =let (b = clamp(a))(b * b * (3 - 2 * b));
    function clamp(a, b = 0, c = 1) = min(max(a, b), c);

 

Tuesday, September 19, 2017

0 - 1 Remapping Functions: Multiple Arcs 2

/* remapping functions */

for(i=[-0:1/160:1])translate([i,0])square([1/160,   (arcs2(  (i),3)) ]);
    function arc1 (x,n=0) = let(a= n>0? arc1(x,(n-1)):x) clamp(sqrt(1-(1-a)*(1-a)));
    function arc2 (x,n=0) =let(a= n>0? arc2(x,(n-1)):x) clamp( 1-sqrt(1-(a)*(a)));
    function arcs1(v,steps=3) = arc1(mods(v,steps),1)/steps+mstep(v,steps);
    function arcs2(v,steps=3) = arc2(mods(v,steps),1)/steps+mstep(v,steps);
    function clamp(a, b = 0, c = 1) = min(max(a, b), c);
    function mstep(v,steps=3) = (floor(v*steps)/steps );
    function mods(v,steps=3) = ( (v*steps)%1);
 


0 - 1 Remapping Functions: Multiple Arcs 1

/* remapping functions */

for(i=[-0:1/160:1])translate([i,0])square([1/160,   (arcs2(  (i),3)) ]);
    function arc1 (x,n=0) = let(a= n>0? arc1(x,(n-1)):x) clamp(sqrt(1-(1-a)*(1-a)));
    function arc2 (x,n=0) =let(a= n>0? arc2(x,(n-1)):x) clamp( 1-sqrt(1-(a)*(a)));
    function arcs1(v,steps=3) = arc1(mods(v,steps),1)/steps+mstep(v,steps);
    function arcs2(v,steps=3) = arc2(mods(v,steps),1)/steps+mstep(v,steps);
    function clamp(a, b = 0, c = 1) = min(max(a, b), c);
    function mstep(v,steps=3) = (floor(v*steps)/steps );
    function mods(v,steps=3) = ( (v*steps)%1);
 

Sunday, September 17, 2017

0 - 1 Remapping Functions: Gauss

/* remapping functions */


for(i=[-0:1/160:1])translate([i,0])square([1/160,   (gauss(  (i))) ]);
    function gauss(x) =       x + (x - smooth(x));
    function smooth (a) =let (b = clamp(a))(b * b * (3 - 2 * b));
    function clamp(a, b = 0, c = 1) = min(max(a, b), c)
 

Friday, September 15, 2017

0 - 1 Remapping Functions: Step Ramp

/* remapping functions */

for(i=[-0:1/160:1])translate([i,0])square([1/160,   ( (  stepramp(i,bi1=1/5,bi2=4/5,start=1/3, end=2/3) )) ]);

function stepramp(v,bi1=1/5,bi2=4/5,start=1/3, end=2/3) = 
let(b1=min(bi1,bi2),b2=max(bi1,bi2))
v<=b1?ramp(v,0,b1,0,start):v<=b2?lerp(start,end,(v-b1)/(b2-b1))    :ramp(v,b2,1,end,1);

function ramp(v,bi1=1/3,bi2=2/3,start=1/3, end=2/3) = 
let(b1=min(bi1,bi2),b2=max(bi1,bi2))
v<=b1?start:v<=b2?lerp(start,end,(v-b1)/(b2-b1))    :end;


function lerp(start, end, bias) = (end * bias + start * (1 - bias));

 

Wednesday, September 13, 2017

0 - 1 Remapping Functions: Ramp

/* remapping functions */


for(i=[-0:1/160:1])translate([i,0])
        square([1/160, (ramp( (i),1/3,2/3,0.1)) ]);
function ramp(v,bi1=1/3,bi2=2/3,start=1/3, end=2/3) = 
        let(b1=min(bi1,bi2),b2=max(bi1,bi2))
        v<=b1?start:v<=b2?lerp(start,end,(v-b1)/(b2-b1))    :end;
function lerp(start, end, bias) = (end * bias + start * (1 - bias));
 

Monday, September 11, 2017

0 - 1 Remapping Functions: Arc 2

/* remapping functions */

for(i=[-0:1/160:1])translate([i,0])square([1/160,  (arc2(  (i)))]);
function arc2 (x,n=0) =
     let(a= n>0? arc2(x,(n-1)):x) clamp( 1-sqrt(1-(a)*(a)));    
function clamp(a, b = 0, c = 1) = min(max(a, b), c);
 

Saturday, September 9, 2017

0 - 1 Remapping Functions: Arc 1

/* remapping functions */


 for(i=[-0:1/160:1])translate([i,0])square([1/160,  (arc1(  (i)))]);
 function arc1 (x,n=0) = let(a= n>0? arc1(x,(n-1)):x) clamp(sqrt(1-(1-a)*(1-a)));
 function clamp(a, b = 0, c = 1) = min(max(a, b), c);
 

Thursday, September 7, 2017

0 - 1 Remapping Functions: Smooth Step

/* remapping functions */


for(i=[-0:1/160:1])translate([i,0])square([1/160, (smooth( (i),2/3,0.1))]);
    function smooth (a) =let (b = clamp(a))(b * b * (3 - 2 * b));
    function clamp(a, b = 0, c = 1) = min(max(a, b), c)
 

Tuesday, September 5, 2017

0 - 1 Remapping Functions: Modulus

/* remapping functions */

for(i=[-0:1/160:1])translate([i,0])square([1/160, (mods(  (i),5))]);
    function mods(v,steps=3) = ( (v*steps)%1);
 

Sunday, September 3, 2017

0 - 1 Remapping Functions: Multi Step

/* remapping functions */


for(i=[-0:1/160:1])translate([i,0])square([1/160, (mstep( i,5))]);
    function mstep(v,steps=3) = (floor(v*steps)/steps );