assuming voronoi(x0,xs) as the function call, with x0 being the existing (measured) points and xs being the query point:
compute convex hull in 3D for x0 resulting in a set of N triangles simplices_old, Nx3
compute convex hull in 3D for [x0;xs] resulting in a set of N+1 triangles simplices_new, (N+1)x3
extract all neighboring x0 sharing a triangle with xs in simplices_new, denoted as x0'
extract all triangles from simplices_old and simplices_new which have at least one of x0' as a
vertex, results are denoted as simplices_old' and simplices_new'
compute spherical Voronoi regions for x0' using simplices_old' and afterwards using simplices_new' (taken from here)
add center of sphere to each triangle to create tetrahedrons
calculate circumcentre of each tetrahedron, Nx3
project circumcentre onto sphere to create the vertices of Voronoi-diagram (xv), Nx3
build Voronoi regions for each x0' (all points in xv which originate from a triangle/tetrahedron where x0' is a vertex belong to the Voronoi region of x0')
compute area of Voronoi regions for both diagrams (see here)
compute weights for each x0' (stolen area/sum of stolen of area)
Follow up of #76:
assuming
voronoi(x0,xs)
as the function call, withx0
being the existing (measured) points andxs
being the query point:x0
resulting in a set of N trianglessimplices_old
, Nx3[x0;xs]
resulting in a set of N+1 trianglessimplices_new
, (N+1)x3x0
sharing a triangle withxs
insimplices_new
, denoted asx0'
simplices_old
andsimplices_new
which have at least one ofx0'
as a vertex, results are denoted assimplices_old'
andsimplices_new'
x0'
usingsimplices_old'
and afterwards usingsimplices_new'
(taken from here)xv
), Nx3x0'
(all points inxv
which originate from a triangle/tetrahedron wherex0'
is a vertex belong to the Voronoi region ofx0'
)x0'
(stolen area/sum of stolen of area)