3d raw output working (other stuff not any more ;D)
This commit is contained in:
parent
2e97437faf
commit
972ccfd30a
6 changed files with 66 additions and 71 deletions
|
@ -38,7 +38,7 @@ void Attractor::init_range() {
|
||||||
const double * point = myAttractor->vector();
|
const double * point = myAttractor->vector();
|
||||||
for ( std::vector<Projector*>::iterator it = projectors.begin(); it != projectors.end(); it++ ) {
|
for ( std::vector<Projector*>::iterator it = projectors.begin(); it != projectors.end(); it++ ) {
|
||||||
(*it)->extern_dim = dimension;
|
(*it)->extern_dim = dimension;
|
||||||
(*it)->intern_dim = 2;
|
(*it)->intern_dim = 3;
|
||||||
(*it)->init(point);
|
(*it)->init(point);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
<Option compiler="gcc" />
|
<Option compiler="gcc" />
|
||||||
<Build>
|
<Build>
|
||||||
<Target title="Debug">
|
<Target title="Debug">
|
||||||
<Option output="bin/Debug/AwesomeAttractor" prefix_auto="1" extension_auto="1" />
|
<Option output="bin\Debug\AwesomeAttractor" prefix_auto="1" extension_auto="1" />
|
||||||
<Option object_output="obj/Debug/" />
|
<Option object_output="obj\Debug\" />
|
||||||
<Option type="1" />
|
<Option type="1" />
|
||||||
<Option compiler="gcc" />
|
<Option compiler="gcc" />
|
||||||
<Compiler>
|
<Compiler>
|
||||||
|
@ -20,8 +20,8 @@
|
||||||
</Linker>
|
</Linker>
|
||||||
</Target>
|
</Target>
|
||||||
<Target title="Release">
|
<Target title="Release">
|
||||||
<Option output="bin/Release/AwesomeAttractor" prefix_auto="1" extension_auto="1" />
|
<Option output="bin\Release\AwesomeAttractor" prefix_auto="1" extension_auto="1" />
|
||||||
<Option object_output="obj/Release/" />
|
<Option object_output="obj\Release\" />
|
||||||
<Option type="1" />
|
<Option type="1" />
|
||||||
<Option compiler="gcc" />
|
<Option compiler="gcc" />
|
||||||
<Compiler>
|
<Compiler>
|
||||||
|
@ -33,8 +33,8 @@
|
||||||
</Linker>
|
</Linker>
|
||||||
</Target>
|
</Target>
|
||||||
<Target title="UniRelease">
|
<Target title="UniRelease">
|
||||||
<Option output="bin/UniRelease/AwesomeAttractor" prefix_auto="1" extension_auto="1" />
|
<Option output="bin\UniRelease\AwesomeAttractor" prefix_auto="1" extension_auto="1" />
|
||||||
<Option object_output="obj/UniRelease/" />
|
<Option object_output="obj\UniRelease\" />
|
||||||
<Option type="1" />
|
<Option type="1" />
|
||||||
<Option compiler="gcc" />
|
<Option compiler="gcc" />
|
||||||
<Compiler>
|
<Compiler>
|
||||||
|
@ -52,9 +52,6 @@
|
||||||
<Add option="-Wall" />
|
<Add option="-Wall" />
|
||||||
<Add option="-Wno-unknown-pragmas" />
|
<Add option="-Wno-unknown-pragmas" />
|
||||||
</Compiler>
|
</Compiler>
|
||||||
<Linker>
|
|
||||||
<Add library="libpng" />
|
|
||||||
</Linker>
|
|
||||||
<Unit filename="Attractor.cpp" />
|
<Unit filename="Attractor.cpp" />
|
||||||
<Unit filename="Attractor.hpp" />
|
<Unit filename="Attractor.hpp" />
|
||||||
<Unit filename="AttractorKernel.cpp" />
|
<Unit filename="AttractorKernel.cpp" />
|
||||||
|
@ -65,27 +62,39 @@
|
||||||
<Unit filename="Projector.hpp">
|
<Unit filename="Projector.hpp">
|
||||||
<Option compilerVar="CC" />
|
<Option compilerVar="CC" />
|
||||||
</Unit>
|
</Unit>
|
||||||
<Unit filename="attractors/testAttractor.stf" />
|
<Unit filename="attractors\testAttractor.stf" />
|
||||||
<Unit filename="attractors/testLorenz.stf" />
|
<Unit filename="attractors\testLorenz.stf" />
|
||||||
<Unit filename="attractors/testPolynomial.stf" />
|
<Unit filename="attractors\testPolynomial.stf" />
|
||||||
<Unit filename="attractors/testUnravel.stf" />
|
<Unit filename="attractors\testUnravel.stf" />
|
||||||
|
<Unit filename="canvae\PNG.cpp">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="canvae\PNG.hpp">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="canvae\Raw.cpp" />
|
||||||
|
<Unit filename="canvae\Raw.hpp" />
|
||||||
<Unit filename="defines.hpp" />
|
<Unit filename="defines.hpp" />
|
||||||
<Unit filename="kernels/Logistic.cpp" />
|
<Unit filename="kernels\Logistic.cpp" />
|
||||||
<Unit filename="kernels/Logistic.hpp" />
|
<Unit filename="kernels\Logistic.hpp" />
|
||||||
<Unit filename="kernels/Lorenz3D.cpp" />
|
<Unit filename="kernels\Lorenz3D.cpp" />
|
||||||
<Unit filename="kernels/Lorenz3D.hpp" />
|
<Unit filename="kernels\Lorenz3D.hpp" />
|
||||||
<Unit filename="kernels/Polynomial.cpp" />
|
<Unit filename="kernels\Polynomial.cpp" />
|
||||||
<Unit filename="kernels/Polynomial.hpp" />
|
<Unit filename="kernels\Polynomial.hpp" />
|
||||||
<Unit filename="kernels/PolynomialA3D.cpp" />
|
<Unit filename="kernels\PolynomialA3D.cpp" />
|
||||||
<Unit filename="kernels/PolynomialA3D.hpp" />
|
<Unit filename="kernels\PolynomialA3D.hpp" />
|
||||||
<Unit filename="kernels/Unravel3D.cpp" />
|
<Unit filename="kernels\Unravel3D.cpp" />
|
||||||
<Unit filename="kernels/Unravel3D.hpp" />
|
<Unit filename="kernels\Unravel3D.hpp" />
|
||||||
<Unit filename="main.cpp" />
|
<Unit filename="main.cpp" />
|
||||||
<Unit filename="myMath.hpp" />
|
<Unit filename="myMath.hpp" />
|
||||||
<Unit filename="pngwriter/pngwriter.cc" />
|
<Unit filename="pngwriter\pngwriter.cc">
|
||||||
<Unit filename="pngwriter/pngwriter.h" />
|
<Option target="<{~None~}>" />
|
||||||
<Unit filename="stfu/stf.cpp" />
|
</Unit>
|
||||||
<Unit filename="stfu/stf.hpp" />
|
<Unit filename="pngwriter\pngwriter.h">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="stfu\stf.cpp" />
|
||||||
|
<Unit filename="stfu\stf.hpp" />
|
||||||
<Extensions>
|
<Extensions>
|
||||||
<code_completion />
|
<code_completion />
|
||||||
<envvars />
|
<envvars />
|
||||||
|
|
|
@ -45,31 +45,16 @@ void Projector::update_range(const double * point) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Projector::finish_range() {
|
void Projector::finish_range() {
|
||||||
// double max_dist = 0.0;
|
factor = 2.0 / (range_max[0] - range_min[0]);
|
||||||
// for ( unsigned int i = 0; i < intern_dim; i++ ) {
|
|
||||||
// const double dist = range_max[i] - range_min[i];
|
|
||||||
// if ( dist > max_dist )
|
|
||||||
// max_dist = dist;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// factor = 0.9/max_dist;
|
|
||||||
// for ( unsigned int i = 0; i < intern_dim; i++ ) {
|
|
||||||
// offset[i] = -0.5*factor*(range_min[i] + range_max[i]);
|
|
||||||
// }
|
|
||||||
|
|
||||||
factor = canvas->size[0] / (range_max[0] - range_min[0]);
|
|
||||||
unsigned int teh_size = canvas->size[0];
|
|
||||||
for ( unsigned int i = 1; i < intern_dim; i++ ) {
|
for ( unsigned int i = 1; i < intern_dim; i++ ) {
|
||||||
double dist = range_max[i] - range_min[i];
|
double dist = range_max[i] - range_min[i];
|
||||||
if ( factor * dist > (double)canvas->size[i] ) {
|
if ( factor * dist > 2.0 ) {
|
||||||
factor = (double)canvas->size[i] / dist;
|
factor = 2.0 / dist;
|
||||||
//teh_size = canvas->size[i];
|
//teh_size = canvas->size[i];
|
||||||
LogDebug("Crap for dimension %d\n", i);
|
LogDebug("Crap for dimension %d\n", i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
factor /= (double)teh_size;
|
|
||||||
|
|
||||||
for ( unsigned int i = 0; i < intern_dim; i++ ) {
|
for ( unsigned int i = 0; i < intern_dim; i++ ) {
|
||||||
offset[i] = -0.5*factor*(range_min[i] + range_max[i]);
|
offset[i] = -0.5*factor*(range_min[i] + range_max[i]);
|
||||||
}
|
}
|
||||||
|
@ -77,9 +62,10 @@ void Projector::finish_range() {
|
||||||
|
|
||||||
|
|
||||||
void Projector::project(const double * point) {
|
void Projector::project(const double * point) {
|
||||||
assert(extern_dim >= 2);
|
//assert(extern_dim >= 2);
|
||||||
project_point[0] = point[0];
|
project_point[0] = point[0];
|
||||||
project_point[1] = point[1];
|
project_point[1] = point[1];
|
||||||
|
project_point[2] = point[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -88,12 +74,11 @@ void Projector::plot(const double * point) {
|
||||||
|
|
||||||
const double x = project_point[0]*factor + offset[0];
|
const double x = project_point[0]*factor + offset[0];
|
||||||
const double y = project_point[1]*factor + offset[1];
|
const double y = project_point[1]*factor + offset[1];
|
||||||
|
const double z = project_point[2]*factor + offset[2];
|
||||||
|
|
||||||
canvas->plot(x, y);
|
double position[] = {x,y,z};
|
||||||
if ( even(point[2]*17) )
|
|
||||||
canvas->plot(x, y, 1);
|
canvas->plot(position);
|
||||||
if ( even(point[2]*17+0.6) )
|
|
||||||
canvas->plot(x, y, 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,10 @@ Raw::Raw (const unsigned int dimension, const unsigned int* sizes_):
|
||||||
sizesMultiplied[i] = sizesMultiplied[i-1]*sizes[i-1];
|
sizesMultiplied[i] = sizesMultiplied[i-1]*sizes[i-1];
|
||||||
}
|
}
|
||||||
|
|
||||||
arraySize = std::accumulate(sizes, sizes + dimension, multiplies<unsigned int>);
|
arraySize = 1;
|
||||||
|
for ( unsigned int i = 0; i < dimension; ++i ) {
|
||||||
|
arraySize *= sizes[i];
|
||||||
|
}
|
||||||
pixelArray = new unsigned int[arraySize];
|
pixelArray = new unsigned int[arraySize];
|
||||||
assert(pixelArray != NULL);
|
assert(pixelArray != NULL);
|
||||||
|
|
||||||
|
@ -37,14 +40,14 @@ void Raw::clear() {
|
||||||
std::fill_n(pixelArray, arraySize, 0);
|
std::fill_n(pixelArray, arraySize, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Raw::plot(double * position) {
|
void Raw::plot(const double * position) {
|
||||||
unsigned int index = 0;
|
unsigned int index = 0;
|
||||||
for ( unsigned int i = 0; i < dimension; ++i ) {
|
for ( unsigned int i = 0; i < dimension; ++i ) {
|
||||||
index += (position[i]*sizes[i] + 0.5*sizes[i])*sizesMultiplied[i];
|
index += (unsigned int)(position[i]*sizes[i] + 0.5*sizes[i])*sizesMultiplied[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
if(index < arraySize) {
|
if(index < arraySize) {
|
||||||
int_array[index]++;
|
pixelArray[index]++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,7 +55,7 @@ void Raw::plot(double * position) {
|
||||||
I/O functions
|
I/O functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void Raw::output_file(const char * filename){
|
void Raw::output_file(const char * filename) const{
|
||||||
std::ofstream outfile (filename, std::ofstream::binary);
|
std::ofstream outfile (filename, std::ofstream::binary);
|
||||||
outfile.write(reinterpret_cast<char*>(int_array), sizeof(unsigned int)*width*height*num_colors);
|
outfile.write(reinterpret_cast<char*>(pixelArray), sizeof(unsigned int)*arraySize);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
class Raw : public Canvas {
|
class Raw : public Canvas {
|
||||||
unsigned int * sizes;
|
unsigned int * sizes;
|
||||||
unsigned int sizesMultiplied;
|
unsigned int * sizesMultiplied;
|
||||||
unsigned int * pixelArray;
|
unsigned int * pixelArray;
|
||||||
unsigned int arraySize;
|
unsigned int arraySize;
|
||||||
|
|
||||||
|
|
22
main.cpp
22
main.cpp
|
@ -8,21 +8,13 @@
|
||||||
#include "Canvas.hpp"
|
#include "Canvas.hpp"
|
||||||
#include "Projector.hpp"
|
#include "Projector.hpp"
|
||||||
|
|
||||||
|
#include "canvae\Raw.hpp"
|
||||||
|
|
||||||
#include "defines.hpp"
|
#include "defines.hpp"
|
||||||
|
|
||||||
|
|
||||||
int verbose;
|
int verbose;
|
||||||
|
|
||||||
/*
|
|
||||||
char filename[50];
|
|
||||||
time_t t = time(0);
|
|
||||||
struct tm* lt = localtime(&t);
|
|
||||||
int r = rand() % 10;
|
|
||||||
|
|
||||||
sprintf(filename, "render/attractor_%04d-%02d-%02d_%02d-%02d-%02d-%01d.png", lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec, r);
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
void showHelpText(){
|
void showHelpText(){
|
||||||
std::cout << "Awesome Attractor, version " << __DATE__ << std::endl;
|
std::cout << "Awesome Attractor, version " << __DATE__ << std::endl;
|
||||||
std::cout << "Usage: AwesomeAttractor [OPTION]... FILE" << std::endl << std::endl;
|
std::cout << "Usage: AwesomeAttractor [OPTION]... FILE" << std::endl << std::endl;
|
||||||
|
@ -76,7 +68,7 @@ int main(int argc, char *argv[]) {
|
||||||
Projector projection;
|
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.projectors.push_back(&projection);
|
myAttractor.projectors.push_back(&projection);
|
||||||
myAttractor.init_range();
|
myAttractor.init_range();
|
||||||
|
@ -104,8 +96,14 @@ int main(int argc, char *argv[]) {
|
||||||
LogMoreInfo("Average iterations per second: %f\n\n", totalIterations/totalTime);
|
LogMoreInfo("Average iterations per second: %f\n\n", totalIterations/totalTime);
|
||||||
|
|
||||||
// saving output
|
// saving output
|
||||||
|
char filename[50];
|
||||||
|
time_t t = time(0);
|
||||||
|
struct tm* lt = localtime(&t);
|
||||||
|
int r = rand() % 10;
|
||||||
|
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();
|
canvas->output_file(filename);
|
||||||
end = clock();
|
end = clock();
|
||||||
|
|
||||||
totalTime = ((double)(end-start)/(double)(CLOCKS_PER_SEC));
|
totalTime = ((double)(end-start)/(double)(CLOCKS_PER_SEC));
|
||||||
|
|
Reference in a new issue