我有一個boost幾何框類型的序列,並希望找到包含所有這些對象的框的尺寸。如何找到包含所有給定框的框?
我注意到boost幾何提供了encompass函數,這似乎是我要求的一般幾何概念,但我不知道如何對一系列方框執行此操作。
基本上我不得不推出我自己的,但我想知道是否有可能簡單地將一系列盒子變成一個「幾何」,以便我可以簡單地應用envelope
函數。這是我目前寫的:
// elsewhere in my code:
using Location = boost::geometry::model::d2::point_xy<double>;
using Box = boost::geometry::model::box<Location>;
// calculate the smallest box that fully encompasses all provided boxes
template <template <typename...> class IterableContainer>
Box Envelope(const IterableContainer<Box>& sequence)
{
Location minCorner(
std::numeric_limits<double>::max(),
std::numeric_limits<double>::max());
Location maxCorner(
std::numeric_limits<double>::lowest(),
std::numeric_limits<double>::lowest());
for (auto& box : sequence)
{
if (box.min_corner().x() < minCorner.x())
minCorner.x() == box.min_corner().x();
if (box.min_corner().y() < minCorner.y())
minCorner.y() == box.min_corner().y();
if (box.max_corner().x() > maxCorner.x())
maxCorner.x() == box.max_corner().x();
if (box.max_corner().y() > maxCorner.y())
maxCorner.y() == box.max_corner().y();
}
return Box(minCorner, maxCorner);
}
不只是'框',而是「軸對齊的邊界框」。 – Yakk 2014-12-02 10:03:40
沒有意義。從一組框中創建幾何是一個緩慢的操作。 – 2014-12-02 10:18:21
@Yakk,在推動它們是相同的東西 – arman 2014-12-02 12:59:27