#ifndef IKEDA3D_HPP #define IKEDA3D_HPP #include "../AttractorKernel.hpp" #include class Ikeda3D : public AttractorKernel { private: void init() { // setting some starting values std::fill_n(vectorOld, dimension, 0.5); std::fill_n(vectorNew, dimension, 0.5); } public: Ikeda3D(): AttractorKernel(3, 4) { init(); } virtual std::string type() const { return "ikeda"; }; virtual void generate_random_parameters() { parameters[0] = rand() / double(RAND_MAX) *2.0 - 0.5; parameters[1] = rand() / double(RAND_MAX) *2.0 - 0.5; // wikipedia: u parameters[2] = rand() / double(RAND_MAX) *2.0 - 0.5; parameters[3] = rand() / double(RAND_MAX) *20.0; init(); } virtual void operator()() { std::swap(vectorNew, vectorOld); vectorOld[2] = parameters[2] - parameters[3]/(1 + vectorOld[0]*vectorOld[0] + vectorOld[1]*vectorNew[1]); vectorNew[0] = parameters[0] + parameters[1] * (vectorOld[0]*cos(vectorOld[2]) - vectorOld[1]*sin(vectorOld[2])); vectorNew[1] = parameters[1] * (vectorOld[0]*sin(vectorOld[2]) + vectorOld[1]*cos(vectorOld[2])); } }; #endif // IKEDA3D_HPP