Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^2: Better maps with Math::Geometry::Voronoi, and a Challenge for Math Monks

by roboticus (Chancellor)
on Jul 03, 2008 at 20:26 UTC ( [id://695460]=note: print w/replies, xml ) Need Help??


in reply to Re: Better maps with Math::Geometry::Voronoi, and a Challenge for Math Monks
in thread Better maps with Math::Geometry::Voronoi, and a Challenge for Math Monks

BrowserUk:

I used your code and examined the results of all the output arrays. From what I can see, it appears that the extra vertices are due to extra lines. Not extra in the sense that they're not valid, just in that they're unnecessary/unwanted. In the case of a square of four points (Pll, Pul, Plr, and Prr where u=upper, l=lower/left, r=right), you expect a line between Pll and Pul, you also expect a line between Pll and Plr. But a line between Pll and Prr is also valid. Since they intersect at a single point you don't need the last one. I suspect that the code is either experiencing just enough rounding error to insert the extra points, or that the code simply has all those three lines as boundaries, and it simply computes duplicates as it walks through the list of lines.

...roboticus
  • Comment on Re^2: Better maps with Math::Geometry::Voronoi, and a Challenge for Math Monks

Replies are listed 'Best First'.
Re^3: Better maps with Math::Geometry::Voronoi, and a Challenge for Math Monks
by BrowserUk (Patriarch) on Jul 03, 2008 at 21:05 UTC
    . In the case of a square of four points (Pll, Pul, Plr, and Prr where u=upper, l=lower/left, r=right), you expect a line between Pll and Pul, you also expect a line between Pll and Plr. But a line between Pll and Prr is also valid.

    No, that cannot happen. A square can only arise from a cross pattern of 5 dots. And a diagonal line connecting the opposite corners would pass through the central dot and could not be 'normal' to any divisor between that dot and any other.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      BrowserUk:

      Sorry, I should've been more clear. I wasn't referring to the vertices, but the input points to the algorithm. So the diagonal line going through two of the points are the bisector for the other two corners. I put this case into the algorithm (just a few minutes ago):

      my @points = ( [0,0], [2, 0], [0, 2], [2, 2] );

      Yields the following lines:

      [ [1, 0, 1, 0, 1], # X=1 for points 0, 1 [0, 1, 1, 0, 2], # Y=1 for points 0, 2 [0, 1, 1, 1, 3], # Y=1 for points 1, 3 [1, 1, 2, 0, 3], # X+Y=2 for points 0, 3 [1, 0, 1, 2, 3], # X=1 for points 2, 3 ]

      That fourth entry is the diagonal I was talking about. It's clearly the bisector for points 0 and 3, but since it intersects at the same point as the first two, it's irrelevant. Looking at the edge list:

      [ [3, 1, 0], # Edge from (1,1) to (1,1) [1, -1, 1], [4, -1, 1], [2, 0, -1], [0, 0, -1] ]

      Other than the first edge, the rest are as you'd expect to see. I'm suspecting some odd comparison (or roundoff) in the C code to be generating that 0-length segment.

      Just for completeness, here's the list of vertices:

      [ [1, 1], [1, 1] ]

      Looking at the results, I'm struck by a couple items:

      • Some lines are identical, except for the point pairs they were generated from.
      • Only one of the diagonal lines is generated, which is why I suspect roundoff or an odd conditional.
      • It might be worthwhile to add disallow duplicate vertices and/or edges of zero length.

      ...roboticus

      Update: I just tried the cross that you suggested, and the data showed *absolutely no* anomalies....odd!

      Update: Fixed HTML (missed closer for UL).

        I put this case into the algorithm...

        Hm. What do you mean by "put it into the algorithm"?

        Four points (o) in a square, gives six bisectors (.), but just four normals(n). (Four pairs of coincident normals.) But they produce just a single vertex (X) ('scuse the crudity):

        +-----------------------------------------------------+ | n n n | | n n n | | n n n | | n n n | | o.......................on | | . .n n .n. | | . .n n .n . | | . .n n .n . | | . .n n .n . | | . . n .n . | | nnnnnnnnnnn.nnnnnnnnnn Xnnnnnnnnnnn.nnnnnnnnnnnnnnnn| | . . n .n . | | . .n n .n . | | . .n n .n . | | . .n n .n . | | . .n n .n. | | o.......................o | | n n n | | n n n | | n n n | +-----------------------------------------------------+

        And you can't form any polygons from a single vertex!

        Unless you are using the boundaries of the coordinate space to form the missing edges of polygons?

        But if that was the case in Sam's problem, his boundary polygons would just always be a rectangle coincident with the boundaries of the coordinate space.


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://695460]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (5)
As of 2024-04-25 15:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found