From 0ab0acd86beaf3fe86d8669df3a9352d3bdf148f Mon Sep 17 00:00:00 2001 From: Joshua Moerman Date: Mon, 18 Apr 2011 17:12:22 +0200 Subject: [PATCH] randomness almost done? --- Attractor.cpp | 32 ++++++++++++++++++++++++++++++-- AwesomeAttractor.cbp | 11 +++++------ Logger.hpp | 2 +- Projector.cpp | 7 +++++-- Projector.hpp | 2 +- main.cpp | 3 ++- 6 files changed, 44 insertions(+), 13 deletions(-) diff --git a/Attractor.cpp b/Attractor.cpp index cfd8f94..0a914ae 100644 --- a/Attractor.cpp +++ b/Attractor.cpp @@ -22,8 +22,36 @@ Attractor::Attractor(const std::string& filename) : kernel(0), projector(0) { } Attractor::Attractor(){ - LogError("Not implemented yet (random attractor)\n"); - exit(1); + stfu::node kernel_node; + switch(rand()%5){ + case 0: + kernel_node.value("type") = "lorenz"; + kernel_node.value("dimensions") = "3"; + break; + case 1: + kernel_node.value("type") = "polynomial"; + kernel_node.value("dimensions") = std::string() + (char)(rand()%3 + '2'); + break; + case 2: + kernel_node.value("type") = "polynomial a"; + kernel_node.value("dimensions") = "3"; + break; + case 3: + kernel_node.value("type") = "logistic"; + kernel_node.value("dimensions") = std::string() + (char)(rand()%3 + '2'); + break; + case 4: + kernel_node.value("type") = "unravel"; + kernel_node.value("dimensions") = "3"; + break; + } + + kernel = AttractorKernel::createAttractorKernel(kernel_node); + + stfu::node projector_node; + projector_node.value("dimensions") = "2"; + + projector = Projector::createProjector(projector_node, projector_node); } Attractor::~Attractor() { diff --git a/AwesomeAttractor.cbp b/AwesomeAttractor.cbp index 0e449e3..889be03 100644 --- a/AwesomeAttractor.cbp +++ b/AwesomeAttractor.cbp @@ -52,6 +52,9 @@ + + + @@ -67,9 +70,7 @@ - - + @@ -89,9 +90,7 @@ - - + diff --git a/Logger.hpp b/Logger.hpp index fcb9777..d2cf192 100644 --- a/Logger.hpp +++ b/Logger.hpp @@ -15,7 +15,7 @@ extern int verbose; if ( verbose >= 1 ) printf(s, ##__VA_ARGS__); #define LogError(s, ...) \ - if ( verbose >= 0 ) { printf("%s, %d: ", __FILE__, __LINE__); printf(s, ##__VA_ARGS__); } + if ( verbose >= 0 ) { printf("%s, %s(), %d: ", __FILE__, __func__, __LINE__); printf(s, ##__VA_ARGS__); } diff --git a/Projector.cpp b/Projector.cpp index 8e2607e..4d26bbd 100644 --- a/Projector.cpp +++ b/Projector.cpp @@ -53,8 +53,11 @@ void Projector::plot(const double* point) { #include "projectors/Normalizer.hpp" -Projector* Projector::createProjector(stfu::node const& projector, stfu::node const& system) { - Projector* output = new Normalizer(3); +Projector* Projector::createProjector(stfu::node& projector, stfu::node& system) { + const std::string attractorDimension = projector.getValue("dimensions"); + const unsigned int dimension = atoi(attractorDimension.c_str()); + + Projector* output = new Normalizer(dimension); return output; } diff --git a/Projector.hpp b/Projector.hpp index fd0e492..39d9351 100644 --- a/Projector.hpp +++ b/Projector.hpp @@ -33,7 +33,7 @@ public: void plot(const double* point); // factory function - static Projector* createProjector(stfu::node const& projector, stfu::node const& system); + static Projector* createProjector(stfu::node& projector, stfu::node& system); }; #endif // PROJECTOR_HPP diff --git a/main.cpp b/main.cpp index 90dd633..08160ce 100644 --- a/main.cpp +++ b/main.cpp @@ -1,8 +1,8 @@ #include "Logger.hpp" #include #include -#include #include +#include #include "Attractor.hpp" #include "Canvas.hpp" @@ -40,6 +40,7 @@ int main(int argc, char* argv[]) { unsigned int iterations = DEFAULT_ITERATIONS; unsigned int width = DEFAULT_WIDTH; unsigned int height = DEFAULT_HEIGHT; + srand(time(0)); if(argc <= 1) { showHelpText();