You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.2 KiB
62 lines
1.2 KiB
#include "Logger.hpp"
|
|
#include "Projector.hpp"
|
|
|
|
#include <algorithm>
|
|
|
|
#include "Canvas.hpp"
|
|
|
|
#pragma mark -
|
|
#pragma mark memory
|
|
|
|
Projector::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);
|
|
}
|
|
|
|
Projector::~Projector() {
|
|
deallocate();
|
|
}
|
|
|
|
void Projector::allocate() {
|
|
projectedPoint = new double[outputDimension];
|
|
}
|
|
|
|
void Projector::deallocate() {
|
|
delete[] projectedPoint;
|
|
projectedPoint = NULL;
|
|
}
|
|
|
|
#pragma mark -
|
|
#pragma mark plot
|
|
|
|
void Projector::plot(const double* point) {
|
|
project(point);
|
|
|
|
if(ready) {
|
|
if(canvas != NULL) {
|
|
canvas->plot(projectedPoint);
|
|
}
|
|
|
|
if(projector != NULL) {
|
|
projector->plot(projectedPoint);
|
|
}
|
|
}
|
|
}
|
|
|
|
#pragma mark -
|
|
#pragma mark factory function
|
|
|
|
#include "projectors/Normalizer.hpp"
|
|
|
|
Projector* Projector::createProjector(stfu::node& projector, unsigned int input_dimension) {
|
|
|
|
Projector* output = new Normalizer(input_dimension);
|
|
|
|
return output;
|
|
}
|
|
|
|
|