Decomposition to Convex Polygons

后端 未结 4 1876
陌清茗
陌清茗 2020-12-31 08:46

This question is a little involved. I wrote an algorithm for breaking up a simple polygon into convex subpolygons, but now I\'m having trouble proving that it\'s not

相关标签:
4条回答
  • 2020-12-31 09:21

    but vertex 5 should be given preference because 9 is within the range given by 4-5 and 6-5

    What would you do if 4-5 and 6-5 were even more convex so that 9 didn't lie within their range? Then by your rules the proper thing to do would be to connect 9 to 12 because 12 is the closest reflex vertex, which would be suboptimal.

    0 讨论(0)
  • 2020-12-31 09:23

    I believe the regular five pointed star (e.g. with alternating points having collinear segments) is the counterexample you seek.

    Edit in response to comments

    In light of my revised understanding, a revised answer: try an acute five pointed star (e.g. one with arms sufficiently narrow that only the three points comprising the arm opposite the reflex point you are working on are within the range considered "good reflex points"). At least working through it on paper it appears to give more than the optimal. However, a final reading of your code has me wondering: what do you mean by "closest" (i.e. closest to what)?

    Note

    Even though my answer was accepted, it isn't the counter example we initially thought. As @Mark points out in the comments, it goes from four to five at exactly the same time as the optimal does.

    Flip-flop, flip flop

    On further reflection, I think I was right after all. The optimal bound of four can be retained in a acute star by simply assuring that one pair of arms have collinear edges. But the algorithm finds five, even with the patch up.

    I get this:

    removing dead ImageShack link

    When the optimal is this:

    removing dead ImageShack link

    0 讨论(0)
  • 2020-12-31 09:31

    I think your algorithm cannot be optimal because it makes no use of any measure of optimality. You use other metrics like 'closest' vertices, and checking for 'necessary' diagonals.

    To drive a wedge between yours and an optimal algorithm, we need to exploit that gap by looking for shapes with close vertices which would decompose badly. For example (ignore the lines, I found this on the intertubenet):

    concave polygon which forms a G or U shape http://avocado-cad.wiki.sourceforge.net/space/showimage/2007-03-19_-_convexize.png

    You have no protection against the centre-most point being connected across the concave 'gap', which is external to the polygon.

    Your algorithm is also quite complex, and may be overdoing it - just like complex code, you may find bugs in it because complex code makes complex assumptions.

    Consider a more extensive initial stage to break the shape into more, simpler shapes - like triangles - and then an iterative or genetic algorithm to recombine them. You will need a stage like this to combine any unnecessary divisions between your convex polys anyway, and by then you may have limited your possible decompositions to only sub-optimal solutions.

    At a guess something like:

    1. decompose into triangles
    2. non-deterministically generate a number of recombinations
    3. calculate a quality metric (number of polys)
    4. select the best x% of the recombinations
    5. partially decompose each using triangles, and generate a new set of recombinations
    6. repeat from 4 until some measure of convergence is reached
    0 讨论(0)
  • 2020-12-31 09:39

    Found it :( They're actually quite obvious.


    *dead imageshack img*

    A four leaf clover will not be optimal if Steiner points are allowed... the red vertices could have been connected.


    *dead imageshack img*

    It won't even be optimal without Steiner points... 5 could be connected to 14, removing the need for 3-14, 3-12 AND 5-12. This could have been two polygons better! Ouch!

    0 讨论(0)
提交回复
热议问题