colorchord/util.c
2015-01-06 22:51:39 -05:00

59 lines
910 B
C

#include "util.h"
#include <math.h>
#include <stdlib.h>
//Take the absolute distance between two points on a torus.
float fabsloop( float a, float b, float modl )
{
float fa = fabsf( a - b );
fa = fmodf( fa, modl );
if( fa > modl/2.0 )
{
fa = modl - fa;
}
return fa;
}
//Get the weighted - average of two points on a torus.
float avgloop( float pta, float ampa, float ptb, float ampb, float modl )
{
float amptot = ampa + ampb;
//Determine if it should go linearly, or around the edge.
if( fabsf( pta - ptb ) > modl/2.0 )
{
//Loop around the outside.
if( pta < ptb )
{
pta += modl;
}
else
{
ptb += modl;
}
}
float modmid = (pta * ampa + ptb * ampb)/amptot;
return fmodf( modmid, modl );
}
int atoi_del( char * data )
{
int ret = atoi( data );
free( data );
return ret;
}
float atof_del( char * data )
{
float ret = atof( data );
free( data );
return ret;
}