1
Fork 0
This repository has been archived on 2025-04-09. You can view files and clone it, but cannot push or open issues or pull requests.
awesome-attractor/Projector.hpp
Joshua Moerman (joshua-desktop) 4a2a273b50 more to headers, some cleanup
2011-04-23 22:09:06 +02:00

72 lines
1.3 KiB
C++

#ifndef PROJECTOR_HPP
#define PROJECTOR_HPP
#include "Logger.hpp"
#include <algorithm>
#include "stfu/stf.hpp"
#include "Canvas.hpp"
class Projector {
public:
// SHOULD NOT BE HERE
Canvas* canvas;
Projector(unsigned int inputDimension, unsigned int outputDimension) :
canvas(0), projector(0), projectedPoint(0),
inputDimension(inputDimension), outputDimension(outputDimension),
ready(true) {
try {
allocate();
} catch(std::exception& e) {
LogError("Couldn't construct Projector: %s\n", e.what());
deallocate();
}
std::fill_n(projectedPoint, outputDimension, 0.0);
}
virtual ~Projector() {
deallocate();
}
void plot(const double* point) {
project(point);
if(ready) {
if(canvas != NULL) {
canvas->plot(projectedPoint);
}
if(projector != NULL) {
projector->plot(projectedPoint);
}
}
}
static Projector* createProjector(stfu::node& projector, unsigned int input_dimension);
protected:
Projector* projector;
double* projectedPoint;
unsigned int inputDimension;
unsigned int outputDimension;
bool ready;
virtual void project(const double* point) = 0;
private:
void allocate() {
projectedPoint = new double[outputDimension];
}
void deallocate() {
delete[] projectedPoint;
projectedPoint = NULL;
}
};
#endif // PROJECTOR_HPP