diff --git a/AttractorKernel.cpp b/AttractorKernel.cpp
index dbd79d5..986c4da 100644
--- a/AttractorKernel.cpp
+++ b/AttractorKernel.cpp
@@ -13,6 +13,7 @@
#include "kernels/Polynomial.hpp"
#include "kernels/PolynomialA3D.hpp"
#include "kernels/Unravel3D.hpp"
+#include "kernels/Ikeda3D.hpp"
AttractorKernel* AttractorKernel::createAttractorKernel(stfu::node& attractor) {
@@ -61,6 +62,13 @@ AttractorKernel* AttractorKernel::createAttractorKernel(stfu::node& attractor) {
LogError("something wrong\n");
exit(37);
}
+ } else if(attractorType == "ikeda") {
+ if(dimension == 3) {
+ myAttractor = new Ikeda3D();
+ } else {
+ LogError("something wrong\n");
+ exit(37);
+ }
} else {
LogError("'%s' not recognized\n", attractorType.c_str());
exit(37);
diff --git a/AwesomeAttractor.cbp b/AwesomeAttractor.cbp
index 2003465..bd486d9 100644
--- a/AwesomeAttractor.cbp
+++ b/AwesomeAttractor.cbp
@@ -7,8 +7,8 @@
-
-
+
+
@@ -20,8 +20,8 @@
-
-
+
+
@@ -33,8 +33,8 @@
-
-
+
+
@@ -66,35 +66,36 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/kernels/Ikeda3D.hpp b/kernels/Ikeda3D.hpp
new file mode 100644
index 0000000..b0b7bcf
--- /dev/null
+++ b/kernels/Ikeda3D.hpp
@@ -0,0 +1,41 @@
+#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, 1) {
+ init();
+ }
+
+ virtual std::string type() { return "ikeda"; };
+
+ virtual void generate_random_parameters() {
+ parameters[0] = rand() / double(RAND_MAX) *2.0 - 0.5;
+ init();
+ }
+
+ virtual void operator()() {
+ std::swap(vectorNew, vectorOld);
+
+ vectorOld[2] = 0.4 - 6.0/(1 + vectorOld[0]*vectorOld[0] + vectorOld[1]*vectorNew[1]);
+
+ vectorNew[0] = 1 + parameters[0] * (vectorOld[0]*cos(vectorOld[2]) - vectorOld[1]*sin(vectorOld[2]));
+ vectorNew[0] = parameters[0] * (vectorOld[0]*sin(vectorOld[2]) + vectorOld[1]*cos(vectorOld[2]));
+ }
+};
+
+#endif // IKEDA3D_HPP
+