Actually, I wasn't aware of that package -- thanks for the link! It looks 
like the output from this package would also need some work, though.

On Tuesday, February 2, 2016 at 3:12:29 PM UTC+1, Tom Breloff wrote:
>
> I don't have a complete answer, but wanted to make you aware of this 
> package: https://github.com/Voxel8/Voronoi.jl
>
> On Tue, Feb 2, 2016 at 7:23 AM, Robert DJ <[email protected] 
> <javascript:>> wrote:
>
>> Hi,
>>
>> I am looking for way to work with Voronoi tesselations. I have a set of 
>> 2D points where the stored order is not important, but has to be preserved 
>> in the final result.
>> I would like to compute the bounded Voronoi tesselation of the points 
>> (i.e., the Voronoi tesselation intersected with a bounding box) and
>>
>> - compute the corners of each Voronoi cell (which may be on the bounding 
>> box).
>> - compute the area of each Voronoi cell; the vector of areas should be in 
>> the same order as the Voronoi centers.
>>
>> (If the corners of the cells are returned in a data structure that is 
>> ordered like the Voronoi centers, the second point is of course obsolete).
>>
>> The VoronoiDelaunay package computes the corners of each Voronoi cell, 
>> but it would require post-processing to reorder and calculate the 
>> intersection with a bounding box.
>>
>> I've looked into two alternatives that motivate the second part of the 
>> title:
>>
>> - Qhull computes the corners of each Voronoi cell and as I recall from 
>> Matlab they are ordered as I need. Unfortunately, I can't even figure out 
>> how to compile Qhull and other posts around here suggest that Qhull is not 
>> easy to work with...
>>
>> - The R package deldir is a wrapper for a Fortran library and (in R) it 
>> returns exactly what I need. I've written a function that calls the Fortran 
>> library, but Julia segfaults and I can't figure out why.
>>
>> If I can make it work easily, I think that calling an external library 
>> would be a quick solution here and now. But maybe I have overlooked a 
>> better way?
>>
>> Best,
>>
>> Robert
>>
>>
>>
>> The easiest way to get the shared Fortran library from deldir is probably 
>> to install the R package: 
>> install.package("deldir")
>>
>> The Julia function that calls the Fortran library gives a few warnings of 
>> the type
>> WARNING: convert(::Type{Ptr}, ::Int64) methods should be converted to be 
>> methods of unsafe_convert
>> Changing every integer and Int-type to Int32 doesn't remove the warning.
>>
>> All the variables needed by the Fortran "master" function are copied from 
>> the R script/wrapper without dwelving into their background. I don't know 
>> what the "master" function returns; first I just want it not to crash.
>>
>> # Mac
>> const libdeldir = 
>> "/Library/Frameworks/R.framework/Versions/3.2/Resources/library/deldir/libs/deldir.so"
>> # Linux
>> const libdeldir = expanduser(
>> "~/R/x86_64-pc-linux-gnu-library/3.2/deldir/libs/deldir.so")
>>
>> function deldir(x::Vector{Float64}, y::Vector{Float64};
>>  sort::Int32=1, rw::Vector{Float64}=[0.0;1.0;0.0;1.0],
>>  epsi::Float64=1e-9 )
>>
>>  @assert (num_points = length(x)) == length(y) "Coordinate vectors must 
>> be of equal length"
>>  @assert epsi >= eps(Float64)
>>
>>  # Dummy points
>>  num_dum_points = 0
>>  npd = num_points + num_dum_points
>>
>>  # The total number of points
>>  ntot = npd + 4
>>
>>  X = [zeros(4); x; zeros(4)]
>>  Y = [zeros(4); y; zeros(4)]
>>
>>  # Set up fixed dimensioning constants
>>  ntdel = 4*npd
>>  ntdir = 3*npd
>>
>>  # Set up dimensioning constants which might need to be increased:
>>  madj = max( 20, ceil(Int32,3*sqrt(ntot)) )
>>  tadj = (madj+1)*(ntot+4)
>>  ndel = Int32( madj*(madj+1)/2 )
>>  tdel = 6*ndel
>>  ndir = ndel
>>  tdir = 8*ndir
>>
>>  nadj   = zeros(Int32, tadj)
>>  ind    = zeros(Int32, npd)
>>  tx     = zeros(Float64, npd)
>>  ty     = zeros(Float64, npd)
>>  ilist  = zeros(Int32, npd)
>>  delsgs = zeros(Float64, tdel)
>>  delsum = zeros(Float64, ntdel)
>>  dirsgs = zeros(Float64, tdir)
>>  dirsum = zeros(Float64, ntdir)
>>  nerror = Int32[1]
>>
>>  ccall( (:master_, libdeldir), Void,
>>  (Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Float64}, Ptr{Int32},
>>  Ptr{Int32}, Ptr{Int32}, Ptr{Int32}, Ptr{Int32}, Ptr{Float64}, Ptr{
>> Float64}, 
>>  Ptr{Int32}, Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Float64}, 
>>  Ptr{Float64}, Ptr{Int32}, Ptr{Float64}, Ptr{Int32}),
>>  X, Y, &sort, rw, npd, 
>>  &ntot, nadj, &madj, ind, tx, ty, 
>>  ilist, &epsi, delsgs, ndel, delsum, 
>>  dirsgs, &ndir, dirsum, nerror
>>  )
>> end
>>
>>
>>
>

Reply via email to