We present a new data structure for a set of
n convex simply-shaped fat objects in the plane, and use it to obtain efficient and rather simple solutions to several problems including (i)
vertical ray shooting—preprocess a set of
n non-intersecting convex simply-shaped flat objects in 3-space, whose
xy-projections are fat, for efficient vertical ray shooting queries, (ii)
point enclosure—preprocess a set
C of
n convex simply-shaped fat objects in the plane, so that the
k objects containing a query point
p can be reported efficiently, (iii)
bounded-size range searching— preprocess a set
C of
n convex fat polygons, so that the
k objects intersecting a “not-too-large” query polygon can be reported efficiently, and (iv)
bounded-size segment shooting—preprocess a set
C as in (iii), so that the first object (if exists) hit by a “not-too-long” oriented query segment can be found efficiently. For the first three problems we construct data structures of size O(λ
s(
n)log
3n), where
s is the maximum number of intersections between the boundaries of the (
xy-projections) of any pair of objects, and λ
s(
n) is the maximum length of (
n,
s) Davenport-Schinzel sequences. The data structure for the fourth problem is of size O(λ
s(
n)log
2n). The query time in the first problem is O(log
4n), the query time in the second and third problems is O(log
3n +
klog
2n), and the query time in the fourth problem is O(log
3n).
We also present a simple algorithm for computing a depth order for a set as in (i), that is based on the solution to the vertical ray shooting problem. (A depth order for , if exists, is a linear order of , such that, if K1, K2 and K1 lies vertically above K2, then K1 precedes K2.) Unlike the algorithm of Agarwal et al. (1995) that might output a false order when a depth order does not exist, the new algorithm is able to determine whether such an order exists, and it is often more efficient in practical situations than the former algorithm. 相似文献