Euphoria
poisson.h
Go to the documentation of this file.
1 #pragma once
2 
3 
4 #include <tuple>
5 #include <optional>
6 
7 #include "base/vec2.h"
8 #include "base/rect.h"
9 #include "core/table.h"
10 
11 
12 namespace eu
13 {
14  struct Random;
15 }
16 
17 
18 namespace eu::core
19 {
21  {
24  float r;
25  float bounds_check;
26  int k;
27 
28  float w;
30  std::vector<int> active;
31  std::vector<vec2f> samples;
32 
33  PoissonWorker(const Rectf& area, Random* random, float r, float bs, int k);
34 
35  std::optional<std::tuple<vec2f, vec2f>> update();
36  bool can_place_at(const vec2f& potential_sample, const vec2i& potential_sample_pos);
37  std::tuple<bool, vec2f> try_place(int active_index);
38 
39  [[nodiscard]] vec2i c_point_to_index(const vec2f& p) const;
40 
41  [[nodiscard]] vec2f get_random_point_in_area() const;
42  [[nodiscard]] bool is_done() const;
43  };
44 
45  // r = minimum distance
46  std::vector<vec2f> calc_poisson_samples(const Rectf& area, Random* random, float r, float bs=-1.0f, int k=30);
47 }
48 
std::vector< vec2f > calc_poisson_samples(const Rectf &area, Random *random, float r, float bs, int k)
Definition: poisson.cc:158
Definition: assert.h:90
WEL512 Random Number Generator.
Definition: random.h:21
Definition: rect.h:27
vec2f get_random_point_in_area() const
Definition: poisson.cc:55
bool can_place_at(const vec2f &potential_sample, const vec2i &potential_sample_pos)
Definition: poisson.cc:65
std::vector< vec2f > samples
Definition: poisson.h:31
std::optional< std::tuple< vec2f, vec2f > > update()
Definition: poisson.cc:133
bool is_done() const
Definition: poisson.cc:126
Table< int > grid
Definition: poisson.h:29
std::tuple< bool, vec2f > try_place(int active_index)
Definition: poisson.cc:89
PoissonWorker(const Rectf &area, Random *random, float r, float bs, int k)
Definition: poisson.cc:23
std::vector< int > active
Definition: poisson.h:30
vec2i c_point_to_index(const vec2f &p) const
Definition: poisson.cc:60
Definition: vec2.h:33
Definition: vec2.h:72