it compiles again
This commit is contained in:
parent
c469d61717
commit
288fb945df
8 changed files with 66 additions and 50 deletions
|
@ -18,7 +18,7 @@ Attractor::Attractor(const std::string& filename) : kernel(0), projector(0) {
|
||||||
system.read(filename.c_str());
|
system.read(filename.c_str());
|
||||||
|
|
||||||
kernel = AttractorKernel::createAttractorKernel(system.getChild("AttractorKernel"));
|
kernel = AttractorKernel::createAttractorKernel(system.getChild("AttractorKernel"));
|
||||||
projector = Projector::createProjector(system.getChild(system.getChild("Projector")), system);
|
projector = Projector::createProjector(system.getChild(system.getValue("Projector")), system);
|
||||||
}
|
}
|
||||||
|
|
||||||
Attractor::~Attractor(){
|
Attractor::~Attractor(){
|
||||||
|
@ -32,23 +32,6 @@ void Attractor::init_range() {
|
||||||
for ( unsigned int i = 0; i < 100000; i++ ) {
|
for ( unsigned int i = 0; i < 100000; i++ ) {
|
||||||
iterate();
|
iterate();
|
||||||
}
|
}
|
||||||
|
|
||||||
// initialize projector with dimension and first point
|
|
||||||
const unsigned int dimension = kernel->getDimension();
|
|
||||||
const double * point = kernel->vector();
|
|
||||||
|
|
||||||
projector->extern_dim = dimension;
|
|
||||||
projector->intern_dim = 3;
|
|
||||||
projector->init(point);
|
|
||||||
|
|
||||||
// update ranges
|
|
||||||
for ( unsigned int i = 0; i < 500000; i++ ) {
|
|
||||||
iterate();
|
|
||||||
|
|
||||||
projector->update_range(point);
|
|
||||||
}
|
|
||||||
projector->finish_range();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Attractor::is_chaos() {
|
bool Attractor::is_chaos() {
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#include "Logger.hpp"
|
#include "Logger.hpp"
|
||||||
#include <cmath>
|
|
||||||
#include <cassert>
|
|
||||||
|
|
||||||
#include "Projector.hpp"
|
#include "Projector.hpp"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include "Canvas.hpp"
|
#include "Canvas.hpp"
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
@ -15,10 +15,11 @@ Projector::Projector(unsigned int inputDimension, unsigned int outputDimension)
|
||||||
LogError("Couldn't construct Projector: %s\n", e.what());
|
LogError("Couldn't construct Projector: %s\n", e.what());
|
||||||
deallocate();
|
deallocate();
|
||||||
}
|
}
|
||||||
|
std::fill_n(projectedPoint, outputDimension, 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Projector::~Projector(){
|
Projector::~Projector(){
|
||||||
deallocate()();
|
deallocate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Projector::allocate() {
|
void Projector::allocate() {
|
||||||
|
@ -53,6 +54,8 @@ void Projector::plot(const double* point) {
|
||||||
#include "projectors/Normalizer.hpp"
|
#include "projectors/Normalizer.hpp"
|
||||||
|
|
||||||
Projector* Projector::createProjector(stfu::node const& projector, stfu::node const& system) {
|
Projector* Projector::createProjector(stfu::node const& projector, stfu::node const& system) {
|
||||||
|
Projector* output = new Normalizer(3);
|
||||||
|
|
||||||
return new Normalizer(3);
|
return new Normalizer(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ protected:
|
||||||
virtual void project(const double* point) = 0;
|
virtual void project(const double* point) = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Projector(unsigned int inputDimension, unsigned int outputDimension, unsigned int state);
|
Projector(unsigned int inputDimension, unsigned int outputDimension);
|
||||||
virtual ~Projector();
|
virtual ~Projector();
|
||||||
|
|
||||||
// delegates forward trough the chain, know wha i'm sayin'?
|
// delegates forward trough the chain, know wha i'm sayin'?
|
||||||
|
|
10
main.cpp
10
main.cpp
|
@ -66,15 +66,13 @@ int main(int argc, char* argv[]) {
|
||||||
// initialising stuff
|
// initialising stuff
|
||||||
Attractor myAttractor(attractorFile);
|
Attractor myAttractor(attractorFile);
|
||||||
|
|
||||||
Projector projection;
|
/*unsigned int sizes[] = {128, 128, 128};
|
||||||
unsigned int sizes[] = {128, 128, 128};
|
|
||||||
Canvas* canvas = new Raw(3, sizes);
|
Canvas* canvas = new Raw(3, sizes);
|
||||||
projection.canvas = canvas;
|
projection.canvas = canvas;*/
|
||||||
|
|
||||||
myAttractor.projector = &projection;
|
|
||||||
myAttractor.init_range();
|
myAttractor.init_range();
|
||||||
|
|
||||||
projection.output();
|
//projection.output();
|
||||||
|
|
||||||
LogInfo("\nRendering\n");
|
LogInfo("\nRendering\n");
|
||||||
|
|
||||||
|
@ -104,7 +102,7 @@ int main(int argc, char* argv[]) {
|
||||||
sprintf(filename, "render/attractor_%04d-%02d-%02d_%02d-%02d-%02d-%01d.raw", lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec, r);
|
sprintf(filename, "render/attractor_%04d-%02d-%02d_%02d-%02d-%02d-%01d.raw", lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec, r);
|
||||||
|
|
||||||
start = clock();
|
start = clock();
|
||||||
canvas->output_file(filename);
|
//canvas->output_file(filename);
|
||||||
end = clock();
|
end = clock();
|
||||||
|
|
||||||
totalTime = ((double)(end-start)/(double)(CLOCKS_PER_SEC));
|
totalTime = ((double)(end-start)/(double)(CLOCKS_PER_SEC));
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
|
#include "../Logger.hpp"
|
||||||
#include "Normalizer.hpp"
|
#include "Normalizer.hpp"
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
#pragma mark memory
|
#pragma mark memory
|
||||||
|
|
||||||
Normalizer::Normalizer(unsigned int dimension) : Projector(dimension, dimension) {
|
Normalizer::Normalizer(unsigned int dimension) : Projector(dimension, dimension), factor(1) {
|
||||||
ready = false;
|
ready = false;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -12,16 +13,20 @@ Normalizer::Normalizer(unsigned int dimension) : Projector(dimension, dimension)
|
||||||
LogError("Couldn't construct Normalizer (Projector): %s\n", e.what());
|
LogError("Couldn't construct Normalizer (Projector): %s\n", e.what());
|
||||||
deallocate();
|
deallocate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::fill_n(range_min, outputDimension, 0.0);
|
||||||
|
std::fill_n(range_max, outputDimension, 0.0);
|
||||||
|
std::fill_n(offset, outputDimension, 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Normalizer::~Normalizer() {
|
Normalizer::~Normalizer() {
|
||||||
//dtor
|
deallocate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Normalizer::allocate(){
|
void Normalizer::allocate(){
|
||||||
range_min = new double[outputDimension];
|
range_min = new double[outputDimension];
|
||||||
range_max = new double[outputDimension];
|
range_max = new double[outputDimension];
|
||||||
offset = new double[outputDimension]
|
offset = new double[outputDimension];
|
||||||
}
|
}
|
||||||
|
|
||||||
void Normalizer::deallocate(){
|
void Normalizer::deallocate(){
|
||||||
|
@ -37,9 +42,9 @@ void Normalizer::deallocate(){
|
||||||
#pragma mark plot
|
#pragma mark plot
|
||||||
|
|
||||||
void Normalizer::project(const double * point) {
|
void Normalizer::project(const double * point) {
|
||||||
projectedPoint[0] = point[0]*factor + offset[0];
|
for ( unsigned int i = 0; i < inputDimension; ++i ) {
|
||||||
projectedPoint[1] = point[1]*factor + offset[1];
|
projectedPoint[0] = point[0]*factor + offset[0];
|
||||||
projectedPoint[2] = point[2]*factor + offset[2];
|
}
|
||||||
|
|
||||||
if(!ready){
|
if(!ready){
|
||||||
static unsigned int state = 0;
|
static unsigned int state = 0;
|
||||||
|
@ -47,9 +52,8 @@ void Normalizer::project(const double * point) {
|
||||||
switch(state) {
|
switch(state) {
|
||||||
case 0:
|
case 0:
|
||||||
init_range();
|
init_range();
|
||||||
state = kUpdate;
|
|
||||||
break;
|
break;
|
||||||
case 20000:
|
case 500000:
|
||||||
finish_range();
|
finish_range();
|
||||||
ready = true;
|
ready = true;
|
||||||
break;
|
break;
|
||||||
|
@ -57,31 +61,33 @@ void Normalizer::project(const double * point) {
|
||||||
update_range();
|
update_range();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
++state;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
#pragma mark setting up
|
#pragma mark setting up
|
||||||
|
|
||||||
void Projector::init_range() {
|
void Normalizer::init_range() {
|
||||||
for ( unsigned int i = 0; i < intern_dim; i++ ) {
|
for ( unsigned int i = 0; i < outputDimension; i++ ) {
|
||||||
range_min[i] = range_max[i] = project_point[i];
|
range_min[i] = range_max[i] = projectedPoint[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Projector::update_range() {
|
void Normalizer::update_range() {
|
||||||
for ( unsigned int i = 0; i < intern_dim; i++ ) {
|
for ( unsigned int i = 0; i < outputDimension; i++ ) {
|
||||||
if ( project_point[i] < range_min[i] ) {
|
if ( projectedPoint[i] < range_min[i] ) {
|
||||||
range_min[i] = project_point[i];
|
range_min[i] = projectedPoint[i];
|
||||||
} else if ( project_point[i] > range_max[i] ) {
|
} else if ( projectedPoint[i] > range_max[i] ) {
|
||||||
range_max[i] = project_point[i];
|
range_max[i] = projectedPoint[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Projector::finish_range() {
|
void Normalizer::finish_range() {
|
||||||
factor = 2.0 / (range_max[0] - range_min[0]);
|
factor = 2.0 / (range_max[0] - range_min[0]);
|
||||||
for ( unsigned int i = 1; i < intern_dim; i++ ) {
|
for ( unsigned int i = 1; i < outputDimension; i++ ) {
|
||||||
double dist = range_max[i] - range_min[i];
|
double dist = range_max[i] - range_min[i];
|
||||||
if ( factor * dist > 2.0 ) {
|
if ( factor * dist > 2.0 ) {
|
||||||
factor = 2.0 / dist;
|
factor = 2.0 / dist;
|
||||||
|
@ -90,7 +96,7 @@ void Projector::finish_range() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( unsigned int i = 0; i < intern_dim; i++ ) {
|
for ( unsigned int i = 0; i < outputDimension; i++ ) {
|
||||||
offset[i] = -0.5*factor*(range_min[i] + range_max[i]);
|
offset[i] = -0.5*factor*(range_min[i] + range_max[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef NORMALIZER_HPP
|
#ifndef NORMALIZER_HPP
|
||||||
#define NORMALIZER_HPP
|
#define NORMALIZER_HPP
|
||||||
|
|
||||||
#include "../Projector.h"
|
#include "../Projector.hpp"
|
||||||
|
|
||||||
|
|
||||||
class Normalizer : public Projector {
|
class Normalizer : public Projector {
|
||||||
|
|
10
projectors/Projection.cpp
Normal file
10
projectors/Projection.cpp
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#include "Projection.hpp"
|
||||||
|
|
||||||
|
Projection::Projection(unsigned int inputDimension, unsigned int outputDimension) : Projector(inputDimension, outputDimension){
|
||||||
|
}
|
||||||
|
|
||||||
|
void Projection::project(const double* point){
|
||||||
|
for ( unsigned int i = 0; i < inputDimension; ++i){
|
||||||
|
projectedPoint[i] = point[i];
|
||||||
|
}
|
||||||
|
}
|
16
projectors/Projection.hpp
Normal file
16
projectors/Projection.hpp
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#ifndef PROJECTION_HPP
|
||||||
|
#define PROJECTION_HPP
|
||||||
|
|
||||||
|
#include "../Projector.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
class Projection : public Projector {
|
||||||
|
protected:
|
||||||
|
virtual void project(const double* point);
|
||||||
|
|
||||||
|
public:
|
||||||
|
Projection(unsigned int inputDimension, unsigned int outputDimension);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // PROJECTION_HPP
|
Reference in a new issue