diff options
Diffstat (limited to 'gui/libs/ofxAChaosLib/src/AChaosCollatz.h')
| -rw-r--r-- | gui/libs/ofxAChaosLib/src/AChaosCollatz.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/gui/libs/ofxAChaosLib/src/AChaosCollatz.h b/gui/libs/ofxAChaosLib/src/AChaosCollatz.h new file mode 100644 index 0000000..f57d7b7 --- /dev/null +++ b/gui/libs/ofxAChaosLib/src/AChaosCollatz.h @@ -0,0 +1,58 @@ +/* + 32/64 bits A-Chaos Lib in openFrameworks + (c) s373.net/x 2004, 2012, 2015 + http://s373.net/code/A-Chaos-Lib/A-Chaos.html + programmed by Andre Sier, revised 2015 + License: MIT +*/ + +#pragma once +#include "AChaosBase.h" + +class AChaosCollatz : public AChaosBase { +public: + + long value, offset; + bool mode; + + + AChaosCollatz(){} + ~AChaosCollatz(){} + + vector<string> param_labels={"","offset"}; + + virtual void setup(REAL * params = NULL){ + AChaosBase::init(params, 3, 1); + + if(params==NULL){ + //init + value = offset = 0; + mode = 0; + + REAL p[3] = {(REAL)value,(REAL)offset,(REAL)mode}; + set(p); + } else { set(params); } + } + + void reset(){ + value = (long) iv[0]; + offset = (long) iv[1]; + mode = iv[2]>0; + } + + void calc(){ + + short int stub = value % 2; //par ou impar + + if(!mode) { // L.Collatz collatz mode + if (!stub) value /= 2; //par ]e metade + else value = 3*value+1; //impar ]e 3n+1 + } + else if (mode) { // Terras collatz mode + if (!stub) value /= 2; //par ]e metade + else value = 0.5*(3*value+1); //impar ]e 1/2(3n+1) + } + + ov[0] = (REAL)value; + } +};
\ No newline at end of file |
