Voronoi: Raycast methods

During the develop of HighVoronoi.jl I developed several Raycast-methods. These methods are central to the Voronoi algorithm.

!!! Choice of Raycast Method may be crucial for performance or overall success! The classical Raycast method method=RCOriginal e.g. is only for generators in general position, but is very good for the far field computation on unbounded domains. On the other hand, as soon as you have a bounded domain, method=RCCombined might be very fast compared to all other methods, while it gets very very slow on unbounded domains in high dimensions. It's a classical tradeof.

Classical Method

This is the most classical method introduced in PREPRINT. It basically works only on generators in general position (when a vertex is created by exactly $d+1$ generators) and can be called using method=RCOriginal in the search_settings.

Statistically Boosted Method

This method is called with method=RCNonGeneral and speeds up the classical method in the following way: It performs two classical steps as in PREPRINT and then performs an inrange search and finally sorts out all non-generators. This provides a significant boost when the generators are in non-general position (more than $d+1$ generators for one vertex)

Nested Method

This method is called with method=RCCombined and performs a deep hacking of the nearest-neighbor search, i.e. it made it necessary to include a modified version of NearestNeighbors.jl into the source code of HighVoronoi.jl. The result is a nearest neighbor search that basically converges the raycast method within one single search. It is very fast on bounded and periodic domains but may take much longer on unbounded domains at the periphery of the point set.

Suggested usage

It is highly recommended to use method=RCCombined (the standard setting) and switch to method=RCNonGeneral in pathological situation respectively method=RCNonGeneral only if the generators are "nicely" distributed.