37 this->originalCSpace = cspace;
38 this->scalingFactors = scale;
39 unscaled.resize(scalingFactors.size());
41 if (
static_cast<std::size_t
>(originalCSpace->getDimensionality()) != scalingFactors.size())
44 s <<
"Different number of scaling factors (" << scalingFactors.size()
45 <<
") than dimensionality of the original cspace("
46 << originalCSpace->getDimensionality() <<
")";
48 throw std::invalid_argument{
s.str()};
52 scalingFactors.begin(), scalingFactors.end(), [](
float f) { return f <= 0.f; }))
55 throw std::invalid_argument{
"One or more factors are <= 0!"};
81 for (
auto& cfg : nodes)
91 for (std::size_t i = 0; i < scalingFactors.size(); ++i)
93 config.at(i) *= scalingFactors.at(i);
100 for (
auto& cfg : path.nodes)
111 static_cast<std::size_t
>(
std::distance(cfg.first, cfg.second)));
113 return originalCSpace->isCollisionFree(
114 std::make_pair(unscaled.data(), unscaled.data() + unscaled.size()));
121 cloned->scalingFactors = scalingFactors;
122 cloned->originalCSpace = originalCSpace->
clone();
129 FloatRangeSeq bounds = originalCSpace->getDimensionsBounds();
131 for (std::size_t i = 0; i < scalingFactors.size(); ++i)
133 bounds.at(i).min *= scalingFactors.at(i);
134 bounds.at(i).max *= scalingFactors.at(i);
145 for (std::size_t i = 0; i < scalingFactors.size(); ++i)
147 buffer.at(i) = cfg[i] / scalingFactors.at(i);