49{
50 assert(full_expansion > 0);
51 assert(expansion_step > 0);
52 assert(max_nr_expansion_steps > 0);
53
54 RegionExpansionParameters out;
55
56
57
58
59 out.tiny_expansion = std::min(0.25f * full_expansion,
scaled<float>(0.05f));
60 size_t nsteps = size_t(ceil((full_expansion - out.tiny_expansion) / expansion_step));
61 if (max_nr_expansion_steps > 0)
62 nsteps = std::min(nsteps, max_nr_expansion_steps);
63 assert(nsteps > 0);
64 out.initial_step = (full_expansion - out.tiny_expansion) / nsteps;
65 if (nsteps > 1 && 0.25 * out.initial_step < out.tiny_expansion) {
66
67 nsteps = std::max<size_t>(1, (floor((full_expansion - out.tiny_expansion) / (4. * out.tiny_expansion))));
68 out.initial_step = (full_expansion - out.tiny_expansion) / nsteps;
69 }
70 if (0.25 * out.initial_step < out.tiny_expansion || nsteps == 1) {
71 out.tiny_expansion = 0.2f * full_expansion;
72 out.initial_step = 0.8f * full_expansion;
73 }
74 out.other_step = out.initial_step;
75 out.num_other_steps = nsteps - 1;
76
77
79
80
81
82
83
84 out.max_inflation = (out.tiny_expansion + nsteps * out.initial_step) * 1.1;
85
86
87 return out;
88}
BoundingBox scaled(const BoundingBoxf &bb)
Definition BoundingBox.hpp:284