From 6232f4f5cb2302ee569f73ebe7528a51ac4277c1 Mon Sep 17 00:00:00 2001 From: Cyrille Henry Date: Wed, 1 May 2013 16:51:34 +0000 Subject: code refactorisation, and functionality addition svn path=/trunk/externals/pmpd/; revision=17110 --- pmpd_stat.c | 680 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 680 insertions(+) create mode 100644 pmpd_stat.c (limited to 'pmpd_stat.c') diff --git a/pmpd_stat.c b/pmpd_stat.c new file mode 100644 index 0000000..bedd489 --- /dev/null +++ b/pmpd_stat.c @@ -0,0 +1,680 @@ +void pmpd_massPosMean(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + t_float sommeX; + t_int i,j; + t_atom mean[1]; + + sommeX = 0; + j = 0; + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_mass; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->mass[i].Id) + { + sommeX += x->mass[i].posX; + j++; + } + } + } + else + { + for (i=0; i< x->nb_mass; i++) + { + sommeX += x->mass[i].posX; + j++; + } + } + + sommeX /= j; + SETFLOAT(&(mean[0]),sommeX); + outlet_anything(x->main_outlet, gensym("massPosMean"),1 , mean); +} + +void pmpd_massPosStd(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + t_float sommeX; + t_int i,j; + t_float stdX; + t_atom std_out[1]; + + sommeX = 0; + stdX = 0; + j = 0; + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_mass; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->mass[i].Id) + { + sommeX += x->mass[i].posX; + j++; + } + } + sommeX /= j; + for (i=0; i< x->nb_mass; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->mass[i].Id) + { + stdX += sqr(x->mass[i].posX-sommeX); + } + } + } + else + { + for (i=0; i< x->nb_mass; i++) + { + sommeX += x->mass[i].posX; + j++; + } + sommeX /= j; + for (i=0; i< x->nb_mass; i++) + { + stdX += sqr(x->mass[i].posX-sommeX); + } + } + + stdX = sqrt(stdX/j); + SETFLOAT(&(std_out[0]),stdX); + outlet_anything(x->main_outlet, gensym("massPosStd"),1 , std_out); +} + +void pmpd_massForceMean(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + t_float sommeX; + t_int i,j; + t_atom mean[1]; + + sommeX = 0; + j = 0; + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_mass; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->mass[i].Id) + { + sommeX += x->mass[i].forceX; + j++; + } + } + } + else + { + for (i=0; i< x->nb_mass; i++) + { + sommeX += x->mass[i].forceX; + j++; + } + } + + sommeX /= j; + SETFLOAT(&(mean[0]),sommeX); + outlet_anything(x->main_outlet, gensym("massForceMean"),1 , mean); +} + +void pmpd_massForceStd(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + t_float sommeX; + t_int i,j; + t_float stdX; + t_atom std_out[1]; + + sommeX = 0; + stdX = 0; + j = 0; + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_mass; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->mass[i].Id) + { + sommeX += x->mass[i].forceX; + j++; + } + } + sommeX /= j; + for (i=0; i< x->nb_mass; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->mass[i].Id) + { + stdX += sqr(x->mass[i].forceX-sommeX); + } + } + } + else + { + for (i=0; i< x->nb_mass; i++) + { + sommeX += x->mass[i].forceX; + j++; + } + sommeX /= j; + for (i=0; i< x->nb_mass; i++) + { + stdX += sqr(x->mass[i].forceX-sommeX); + } + } + + stdX = sqrt(stdX/j); + + SETFLOAT(&(std_out[0]),stdX); + + outlet_anything(x->main_outlet, gensym("massForceStd"),1 , std_out); +} + +void pmpd_massSpeedMean(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + t_float sommeX; + t_int i,j; + t_atom mean[1]; + + sommeX = 0; + j = 0; + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_mass; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->mass[i].Id) + { + sommeX += x->mass[i].speedX; + j++; + } + } + } + else + { + for (i=0; i< x->nb_mass; i++) + { + sommeX += x->mass[i].speedX; + j++; + } + } + + sommeX /= j; + + SETFLOAT(&(mean[0]),sommeX); + + outlet_anything(x->main_outlet, gensym("massSpeedMean"),1 , mean); +} + +void pmpd_massSpeedStd(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + t_float sommeX; + t_int i,j; + t_float stdX; + t_atom std_out[1]; + + sommeX = 0; + stdX = 0; + j = 0; + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_mass; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->mass[i].Id) + { + sommeX += x->mass[i].speedX; + j++; + } + } + sommeX /= j; + for (i=0; i< x->nb_mass; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->mass[i].Id) + { + stdX += sqr(x->mass[i].speedX-sommeX); + } + } + } + else + { + for (i=0; i< x->nb_mass; i++) + { + sommeX += x->mass[i].speedX; + j++; + } + sommeX /= j; + for (i=0; i< x->nb_mass; i++) + { + stdX += sqr(x->mass[i].speedX-sommeX); + } + } + + stdX = sqrt(stdX/j); + SETFLOAT(&(std_out[0]),stdX); + outlet_anything(x->main_outlet, gensym("massSpeedStd"),1 , std_out); +} + +//----------------------------- + +void pmpd_linkPosMean(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + t_float sommeX; + t_int i,j; + t_atom mean[1]; + + sommeX = 0; + j = 0; + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_link; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id) + { + sommeX += (x->link[i].mass1->posX + x->link[i].mass2->posX)/2; + j++; + } + } + } + else + { + for (i=0; i< x->nb_link; i++) + { + sommeX += (x->link[i].mass1->posX + x->link[i].mass2->posX)/2; + j++; + } + } + + if ( j> 0) + { + sommeX /= j; + } + + SETFLOAT(&(mean[0]),sommeX); + outlet_anything(x->main_outlet, gensym("linkPosMean"),1 , mean); +} + +void pmpd_linkLengthMean(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + t_float sommeX, somme; + t_int i,j; + t_atom mean[2]; + + sommeX = 0; + somme = 0; + j = 0; + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_link; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id) + { + sommeX += x->link[i].mass1->posX - x->link[i].mass2->posX; + somme += x->link[i].distance; + j+=1; + } + } + } + else if (argc == 0) + { + for (i=0; i< x->nb_link; i++) + { + sommeX += x->link[i].mass1->posX - x->link[i].mass2->posX; + somme += x->link[i].distance; + j+=1; + } + } + + if (j>0) + { + sommeX /= j; + somme /= j; + } + + SETFLOAT(&(mean[0]),sommeX); + SETFLOAT(&(mean[1]),somme); + outlet_anything(x->main_outlet, gensym("linkLengthMean"),2 , mean); +} + +void pmpd_linkPosSpeedMean(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + t_float sommeX; + t_int i,j; + t_atom mean[1]; + + sommeX = 0; + j = 0; + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_link; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id) + { + sommeX += (x->link[i].mass1->speedX + x->link[i].mass2->speedX)/2; + j++; + } + } + } + else + { + for (i=0; i< x->nb_link; i++) + { + sommeX += (x->link[i].mass1->speedX + x->link[i].mass2->speedX)/2; + j++; + } + } + + if (j>0) + { + sommeX /= j; + } + + SETFLOAT(&(mean[0]),sommeX); + outlet_anything(x->main_outlet, gensym("linkPosSpeedMean"),1 , mean); +} + +void pmpd_linkLengthSpeedMean(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + t_float sommeX, tmp; + t_int i,j; + t_atom mean[1]; + + sommeX = 0; + j = 0; + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_link; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id) + { + sommeX += fabs(x->link[i].mass1->speedX - x->link[i].mass2->speedX); + j++; + } + } + } + else + { + for (i=0; i< x->nb_link; i++) + { + sommeX += fabs(x->link[i].mass1->speedX - x->link[i].mass2->speedX); + j++; + } + } + + if (j>0) + { + sommeX /= j; + } + + SETFLOAT(&(mean[0]),sommeX); + outlet_anything(x->main_outlet, gensym("linkLengthSpeedMean"),0 , mean); +} + +void pmpd_linkPosStd(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + t_float sommeX; + t_int i,j; + t_float stdX; + t_atom std_out[1]; + + sommeX = 0; + stdX = 0; + j = 0; + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_link; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id) + { + sommeX += (x->link[i].mass1->posX + x->link[i].mass2->posX)/2; + j++; + } + } + } + else + { + for (i=0; i< x->nb_link; i++) + { + sommeX += (x->link[i].mass1->posX + x->link[i].mass2->posX)/2; + j++; + } + } + + if (j>0) + { + sommeX /= j; + } + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_link; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id) + { + stdX += sqr((x->link[i].mass1->posX + x->link[i].mass2->posX)/2 - sommeX); + j+=1; + } + } + } + else + { + for (i=0; i< x->nb_link; i++) + { + stdX += sqr((x->link[i].mass1->posX + x->link[i].mass2->posX)/2 - sommeX); + j+=1; + } + } + + if ( j > 0) + { + stdX = sqrt(stdX/j); + } + + SETFLOAT(&(std_out[0]),stdX); + outlet_anything(x->main_outlet, gensym("linkPosStd"),1 , std_out); +} + +void pmpd_linkLengthStd(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + t_float sommeX, somme, tmp; + t_int i,j; + t_float stdX, std; + t_atom std_out[2]; + + sommeX = 0; + somme = 0; + stdX = 0; + std = 0; + j = 0; + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_link; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id) + { + sommeX += x->link[i].mass1->posX - x->link[i].mass2->posX; + somme += x->link[i].distance; + j+=1; + } + } + } + else + { + for (i=0; i< x->nb_link; i++) + { + sommeX += x->link[i].mass1->posX - x->link[i].mass2->posX; + somme += x->link[i].distance; + j+=1; + } + } + + if ( j> 0) + { + sommeX /= j; + somme /= j; + } + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_link; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id) + { + stdX += sqr((x->link[i].mass1->posX - x->link[i].mass2->posX)-sommeX); + std += sqr(x->link[i].distance - somme); + j+=1; + } + } + } + else + { + for (i=0; i< x->nb_link; i++) + { + stdX += sqr((x->link[i].mass1->posX - x->link[i].mass2->posX) - sommeX); + std += sqr(x->link[i].distance - somme); + j+=1; + } + } + + if ( j > 0) + { + stdX = sqrt(stdX/j); + } + + SETFLOAT(&(std_out[0]),stdX); + SETFLOAT(&(std_out[1]),std); + outlet_anything(x->main_outlet, gensym("linkLengthStd"),2 , std_out); +} + +void pmpd_linkPosSpeedStd(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + t_float sommeX; + t_float stdX; + t_int i,j; + t_atom std_out[1]; + + sommeX = 0; + stdX = 0; + j = 0; + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_link; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id) + { + sommeX += (x->link[i].mass1->speedX + x->link[i].mass2->speedX)/2; + j++; + } + } + } + else + { + for (i=0; i< x->nb_link; i++) + { + sommeX += (x->link[i].mass1->speedX + x->link[i].mass2->speedX)/2; + j++; + } + } + + if ( j> 0) + { + sommeX /= j; + } + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_link; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id) + { + stdX += sqr((x->link[i].mass1->speedX + x->link[i].mass2->speedX)/2-sommeX); + j++; + } + } + } + else + { + for (i=0; i< x->nb_link; i++) + { + stdX += sqr((x->link[i].mass1->speedX + x->link[i].mass2->speedX)/2-sommeX); + j++; + } + } + + if ( j > 0) + { + stdX = sqrt(stdX/j); + } + + SETFLOAT(&(std_out[0]),stdX); + outlet_anything(x->main_outlet, gensym("linkPosSpeedStd"),1 , std_out); +} + +void pmpd_linkLengthSpeedStd(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + t_float sommeX, tmp; + t_float stdX; + t_int i,j; + t_atom std_out[1]; + + sommeX = 0; + stdX = 0; + j = 0; + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_link; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id) + { + sommeX += fabs(x->link[i].mass1->speedX - x->link[i].mass2->speedX); + j++; + } + } + } + else + { + for (i=0; i< x->nb_link; i++) + { + sommeX += fabs(x->link[i].mass1->speedX - x->link[i].mass2->speedX); + j++; + } + } + + if ( j> 0) + { + sommeX /= j; + } + + if ( (argc >= 1) && (argv[0].a_type == A_SYMBOL) ) + { + for (i=0; i< x->nb_link; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id) + { + stdX += sqr(fabs(x->link[i].mass1->speedX - x->link[i].mass2->speedX) - sommeX); + j++; + } + } + } + else + { + for (i=0; i< x->nb_link; i++) + { + stdX += sqr(fabs(x->link[i].mass1->speedX - x->link[i].mass2->speedX) - sommeX); + j++; + } + } + + if ( j > 0) + { + stdX = sqrt(stdX/j); + + } + + SETFLOAT(&(std_out[0]),stdX); + outlet_anything(x->main_outlet, gensym("linkLengthSpeedStd"),1 , std_out); +} -- cgit v1.2.1