Unify some functions in utils.

This commit is contained in:
2018-01-18 14:43:13 +01:00
parent 51315f1c59
commit 8bef347d05
5 changed files with 46 additions and 6 deletions

View File

@@ -91,10 +91,9 @@ void FlatLayerVisualisation::setVertexPositions(const int vertexNo, float *desti
yOffset = 0; yOffset = 0;
break; break;
case Ordering ::SQUARE: case Ordering::SQUARE:
const auto nodes = faceCount / 4; const auto nodes = faceCount / 4;
auto columns = static_cast<int>(ceil(sqrt(nodes))); auto columns = static_cast<int>(numCols(nodes));
while (nodes % columns) ++columns;
zOffset = -2 * (vertexNo % columns); zOffset = -2 * (vertexNo % columns);
yOffset = 2 * (vertexNo / columns); yOffset = 2 * (vertexNo / columns);

View File

@@ -26,6 +26,6 @@ namespace fmri
std::unique_ptr<float[]> colorBuffer; std::unique_ptr<float[]> colorBuffer;
std::unique_ptr<int[]> indexBuffer; std::unique_ptr<int[]> indexBuffer;
void setVertexPositions(const int vertexNo, float *destination); void setVertexPositions(int vertexNo, float *destination);
}; };
} }

View File

@@ -17,8 +17,7 @@ MultiImageVisualisation::MultiImageVisualisation(const fmri::LayerData &layer)
CHECK_EQ(1, images) << "Only single input image is supported" << endl; CHECK_EQ(1, images) << "Only single input image is supported" << endl;
int columns = ceil(sqrt(channels)); int columns = numCols(channels);
while (channels % columns) columns++;
// Create the quads for the images. // Create the quads for the images.
int r = 0, c = 0; int r = 0, c = 0;

14
src/utils.cpp Normal file
View File

@@ -0,0 +1,14 @@
#include "utils.hpp"
std::default_random_engine &fmri::rng()
{
static std::default_random_engine rng;
static std::default_random_engine::result_type seed = 0;
if (seed == 0) {
std::random_device dev;
rng.seed(seed = dev());
}
return rng;
}

View File

@@ -5,6 +5,7 @@
#include <cmath> #include <cmath>
#include <fstream> #include <fstream>
#include <iterator> #include <iterator>
#include <random>
#include <string> #include <string>
#include <utility> #include <utility>
#include <vector> #include <vector>
@@ -127,4 +128,31 @@ namespace fmri
return val / 180 * M_PI; return val / 180 * M_PI;
} }
/**
* Compute the ideal number of columns for dividing up a range into a rectangle.
*
* @tparam T
* @param elems number of elements to space out
* @return the ideal number of columns
*/
template<class T>
inline T numCols(const T elems) {
auto cols = static_cast<T>(ceil(sqrt(elems)));
while (elems % cols) {
++cols;// TODO: this should probably be done analytically
}
return cols;
}
/**
* Get a globally initialized random number generator.
*
* This RNG should always be used as a reference, to make sure the state actually updates.
*
* @return A reference to the global RNG.
*/
std::default_random_engine& rng();
} }