Voronoi Diagrams

Ben Abbott bpabbott at mac.com
Mon Dec 22 12:25:38 CST 2008


On Dec 22, 2008, at 10:50 AM, Ryan Matthew Balfanz wrote:
>
> On Mon, Dec 22, 2008 at 9:43 AM, Ben Abbott <bpabbott at mac.com> wrote:
>>
>> On Dec 22, 2008, at 10:11 AM, Ryan Matthew Balfanz wrote:
>>
>>> Hi all,
>>> I've been having trouble getting octave to play nice making voronoi
>>> diagrams with large data sets (~5000).
>>>
>>> Does anyone else notice this? I don't want to file a big report  
>>> unless
>>> I know it is universal.
>>>
>>> Thanks,
>>> Ryan
>>
>> Can you give some more detail?
>>
>> It is possible to create a simple script to demonstrate the problem?
>>
>> Ben
>
> Hi Ben,
> Thanks for the reply. He is some more information, hope it helps.
>
> I've not included my own script / data file for this more general
> example taken from
> http://www.obihiro.ac.jp/~suzukim/masuda/octave/html3/octave_152.html
> .
> I've only upped the number of random points from 10 to 1000.
>
> === test_voronoi.m  ===
> x = rand (1000, 1);
> y = rand (size (x));
> h = convhull (x, y);
> [vx, vy] = voronoi (x, y);
> plot (vx, vy, "-b", x, y, "o", x(h), y(h), "-g")
> legend ("", "points", "hull");
>
> === Output ===
> client138-50:Desktop ryan$ octave test_voronoi.m
> GNU Octave, version 3.0.3
> Copyright (C) 2008 John W. Eaton and others.
> This is free software; see the source code for copying conditions.
> There is ABSOLUTELY NO WARRANTY; not even for MERCHANTIBILITY or
> FITNESS FOR A PARTICULAR PURPOSE.  For details, type `warranty'.
>
> Octave was configured for "i386-apple-darwin9.5.0".
>
> Additional information about Octave is available at http://www.octave.org 
> .
>
> Please contribute if you find this software useful.
> For more information, visit http://www.octave.org/help-wanted.html
>
> Report bugs to <bug at octave.org> (but first, please read
> http://www.octave.org/bugs.html to learn how to write a helpful  
> report).
>
> For information about changes from previous versions, type `news'.
>
>
> Output completed.  Verifying that all points are below 2.6e-15 of
> all facets.  Will make 17000 distance computations.
> error: invalid vector index = 963
> error: evaluating argument list element number 1
> error: evaluating assignment expression near line 133, column 7
> error: evaluating for command near line 132, column 3
> error: called from `voronoi' in file
> `/opt/local/share/octave/3.0.3/m/geometry/voronoi.m'
> error: near line 4 of file `test_voronoi.m'

My fist comment is that I'm out of my area of expertise .... looking  
at voronoi.m I've isoloated the origin of the error to the three lines  
below (lines 125-129 in voronoi.m)

	[p, c, infi] = __voronoi__ ([x(:), y(:)], opts{:});
	idx = find (!infi);
	ll = length (idx);

The problem is that "c" may be returned with a shorted length than  
"idx". After many test runs I've concluded there is some statistical  
possibility that even relatively short input vectors can produce the  
error, but those longer than 209 do so very reliably. However, once  
you chose a length of 1000, failure is essentially guaranteed.

I do not know if it is proper to do so, but the error may be avoided  
by determining "ll" by

	ll = min (length (idx), length (c));

While this does permit a diagram to be produced and the rendered  
convex hull does appear to be correct, it is clear that someone who  
understands how __voronoi__ is intended to work should look at this.

As Kai Habel was the originator of the __voronoi__.cc, I've cc'd him  
in the hope he offer a more expert opinion.

Ben




More information about the Help-octave mailing list