3 Computing the Natural Neighbors
Interpolant
When computing the natural neighbors interpolant,
it is important to intuit the relative ‘neighborliness,’
as (?) calls it, of adjacent Voronoi cells. These
neighbors are the points within the original point
set whose Voronoi cells intersect the Voronoi cell
of the interpolated point, if it were to be added to
the point set. The interpolated value is computed
as a weighted average of the area stolen from each
neighbor by the insertion of this point.
To compute this weighted average, we first compute
the Delaunay triangulation of the original set
of points P. Given DT(P) we need to calculate the
Voronoi cell of the point v, whose value we want to
estimate, if it were to be added to P. Since the insertion
of v will only alter DT(P) and consequently
Vor(P) locally, we do not need to recompute the entire
Delaunay triangulation. We only need to compute
a Delaunay triangulation for the points which
would be neighbors of v. In order to determine this
local point set we can use the existing triangulation
DT(P)and corresponding Voronoi diagram. The area
stolen from each neighbor of v can be computed by
finding the difference between the area of Voronoi
cell in Vor(P) and the area within the local Voronoi
diagram. The interpolated value for v is then calculated
as: P
neighbors ofv
areastolen
area of the Voronoi cell ofv
α
where alpha is the value, possibly an elevation value,
for the specific neighbor.
To compute DT(P) and transform to Vor(P) as described
earlier takes O(n logn) time where n is the
size of P. Vor(P) must be calculated once for the
original point set. The local Voronoi diagram must
be calculated for each interpolated point. Since the
size of this local subset of P does not depend on
n but rather the distribution of points in P and the
number of neighbors that the inserted point would
have, we can assume that for large point sets, this
local set of points will be much smaller than n and
will not depend on n. This means calculating the local
Voronoi diagram will take a relatively constant
amount of time independent of the size of P. In order
to determine which points belong in this local
point set we determine which triangle in DT(P) the
point lies within. We can follow the outgoing edges
from the vertices of this triangle to determine the appropriate
neighbors to include. This process again
depends on the the size of the local point set which
does not depend on n. To calculate the weighted average
we must locate Voronoi cells a constant number
of times. We can use the DAG search structure
for DT(P) to locate points and follow the dual pointers
into Vor(P). Locating a Voronoi cell will take
O(logn) time. For each point we need to interpolate
we need to perform a constant number of logn
searches plus a relatively constant amount of work
to compute the local Voronoi diagram, so to interpolate
k points for a point set of size n would take
O((n+k)logn) time.