mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2024-12-23 04:16:50 +01:00
Fix a few typos and remove std::optional from wcf.
This commit is contained in:
parent
dfbae29faa
commit
5be272e5cb
@ -21,7 +21,7 @@ public:
|
||||
Array2D(std::size_t p_height, std::size_t p_width, T p_value) {
|
||||
height = p_height;
|
||||
width = p_width;
|
||||
data.resize(width * height, value);
|
||||
data.resize(width * height, p_value);
|
||||
}
|
||||
|
||||
const T &get(std::size_t i, std::size_t j) const {
|
||||
|
@ -20,7 +20,7 @@ public:
|
||||
data.resize(width * height * depth);
|
||||
}
|
||||
|
||||
Array3D(std::size_t height, std::size_t width, std::size_t depth, T value) {
|
||||
Array3D(std::size_t p_height, std::size_t p_width, std::size_t p_depth, T value) {
|
||||
height = p_height;
|
||||
width = p_width;
|
||||
depth = p_depth;
|
||||
|
@ -228,14 +228,14 @@ private:
|
||||
return output;
|
||||
}
|
||||
|
||||
std::optional<unsigned> get_pattern_id(const Array2D<T> &pattern) {
|
||||
unsigned get_pattern_id(const Array2D<T> &pattern) {
|
||||
unsigned *pattern_id = std::find(patterns.begin(), patterns.end(), pattern);
|
||||
|
||||
if (pattern_id != patterns.end()) {
|
||||
return *pattern_id;
|
||||
}
|
||||
|
||||
return std::nullopt;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Set the pattern at a specific position, given its pattern id
|
||||
@ -267,12 +267,14 @@ public:
|
||||
}
|
||||
|
||||
// Run the WFC algorithm, and return the result if the algorithm succeeded.
|
||||
std::optional<Array2D<T>> run() {
|
||||
std::optional<Array2D<unsigned>> result = wfc.run();
|
||||
if (result.has_value()) {
|
||||
return to_image(*result);
|
||||
Array2D<T> run() {
|
||||
Array2D<unsigned> result = wfc.run();
|
||||
|
||||
if (result.width == 0 && result.height == 0) {
|
||||
return Array2D<T>(0, 0);
|
||||
}
|
||||
return std::nullopt;
|
||||
|
||||
return to_image(result);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -64,8 +64,7 @@ struct Tile {
|
||||
|
||||
// Generate the map associating an orientation id to the orientation
|
||||
// id obtained when reflecting the tile along the x axis.
|
||||
static std::vector<unsigned>
|
||||
generate_reflection_map(const Symmetry &symmetry) {
|
||||
static std::vector<unsigned> generate_reflection_map(const Symmetry &symmetry) {
|
||||
switch (symmetry) {
|
||||
case Symmetry::X:
|
||||
return { 0 };
|
||||
@ -332,12 +331,14 @@ public:
|
||||
}
|
||||
|
||||
// Run the tiling wfc and return the result if the algorithm succeeded
|
||||
std::optional<Array2D<T>> run() {
|
||||
auto a = wfc.run();
|
||||
if (a == std::nullopt) {
|
||||
return std::nullopt;
|
||||
Array2D<T> run() {
|
||||
Array2D<unsigned> a = wfc.run();
|
||||
|
||||
if (a.width == 0 && a.height == 0) {
|
||||
return Array2D<T>(0, 0);
|
||||
}
|
||||
return id_to_tiling(*a);
|
||||
|
||||
return id_to_tiling(a);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -5,8 +5,7 @@
|
||||
namespace {
|
||||
|
||||
// Return distribution * log(distribution).
|
||||
std::vector<double>
|
||||
get_plogp(const std::vector<double> &distribution) {
|
||||
std::vector<double> get_plogp(const std::vector<double> &distribution) {
|
||||
std::vector<double> plogp;
|
||||
for (unsigned i = 0; i < distribution.size(); i++) {
|
||||
plogp.push_back(distribution[i] * log(distribution[i]));
|
||||
@ -65,9 +64,7 @@ void Wave::set(unsigned index, unsigned pattern, bool value) {
|
||||
memoisation.sum[index] -= patterns_frequencies[pattern];
|
||||
memoisation.log_sum[index] = log(memoisation.sum[index]);
|
||||
memoisation.nb_patterns[index]--;
|
||||
memoisation.entropy[index] =
|
||||
memoisation.log_sum[index] -
|
||||
memoisation.plogp_sum[index] / memoisation.sum[index];
|
||||
memoisation.entropy[index] = memoisation.log_sum[index] - memoisation.plogp_sum[index] / memoisation.sum[index];
|
||||
// If there is no patterns possible in the cell, then there is a
|
||||
// contradiction.
|
||||
if (memoisation.nb_patterns[index] == 0) {
|
||||
|
@ -36,14 +36,14 @@ WFC::WFC(bool periodic_output, int seed,
|
||||
unsigned wave_width) :
|
||||
gen(seed), patterns_frequencies(normalize(patterns_frequencies)), wave(wave_height, wave_width, patterns_frequencies), nb_patterns(propagator.size()), propagator(wave.height, wave.width, periodic_output, propagator) {}
|
||||
|
||||
std::optional<Array2D<unsigned>> WFC::run() {
|
||||
Array2D<unsigned> WFC::run() {
|
||||
while (true) {
|
||||
// Define the value of an undefined cell.
|
||||
ObserveStatus result = observe();
|
||||
|
||||
// Check if the algorithm has terminated.
|
||||
if (result == failure) {
|
||||
return std::nullopt;
|
||||
return Array2D<unsigned>(0, 0);
|
||||
} else if (result == success) {
|
||||
return wave_to_output();
|
||||
}
|
||||
@ -90,8 +90,7 @@ WFC::ObserveStatus WFC::observe() {
|
||||
// And define the cell with the pattern.
|
||||
for (unsigned k = 0; k < nb_patterns; k++) {
|
||||
if (wave.get(argmin, k) != (k == chosen_value)) {
|
||||
propagator.add_to_propagator(argmin / wave.width, argmin % wave.width,
|
||||
k);
|
||||
propagator.add_to_propagator(argmin / wave.width, argmin % wave.width, k);
|
||||
wave.set(argmin, k, false);
|
||||
}
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ public:
|
||||
unsigned wave_width);
|
||||
|
||||
// Run the algorithm, and return a result if it succeeded.
|
||||
std::optional<Array2D<unsigned>> run();
|
||||
Array2D<unsigned> run();
|
||||
|
||||
// Return value of observe.
|
||||
enum ObserveStatus {
|
||||
|
Loading…
Reference in New Issue
Block a user