|
Boost : |
Subject: Re: [boost] GSoC2010 Sweepline Algorithm
From: Andriy Sydorchuk (sydorchuk.andriy_at_[hidden])
Date: 2010-03-31 19:16:32
> For an explanation of how to use map or set for a sweepline. You don't
> need to use the optimization of casting away const of the key. Just remove
> and reinsert with a new key. That's what I do.
That was the first idea I was thinking: creating generic wrapper around set
datastructure (Adapter pattern) with definition of node comparer. So it will
look smth like this:
template <class T>
struct NodeComparer {
public:
bool operator() (const T& node1, const T& node2) const {
...
}
}
template <class T, class Comparer = NodeComparer<T> >
class BeachLine {
public: ...
private: ...
typedef std::set<T, Comparer > bl_set;
...
bl_set beach_line_;
}
You can use a map or set for the event queue, otherwise use a stl vector
> with the stl heap operations if you are performance conscious. This is an
> optimization that can be performed after you get the algorithm working. It
> is better to take all of your original input events and sort them in a
> vector then merge them with events generated by the sweepline itself on the
> fly. Since a sorted vector satisfies the properties of a heap you could use
> it with the stl heap operations, however, it requires that your sweep
> algorithm know the data structure its input is coming from, and I have
> always abstracted that away with iterator interfaces. It is reasonable to
> assume that the input is a vector, however.
Yes, I've read about this kind of approach at this article: "An Efficient
Implementation of Fortunes Plane-Sweep Algorithm for Voronoi
Diagrams" KennyWong, Hausi A. Muller. There are also few more nice ideas
there.
-- Best regards, Andrii Sydorchuk
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk