Saturday, February 16, 2013

Cut Thy Polygon

Fruit Ninja is an awesome game.. very addictive.. and fun to play.. but if you observe carefully you will see that where ever you slash the fruit.. it is always cut in half.. It is a simple trick to keep things nice and fast. But imagine if you could cut and slice a fruit every which way you wanted precisely the way you wanted.. this is an idea i had for a while..

  • Slicing enemies into pieces based on slashes.
  • Slicing fruits based on the slashs
  • Creating predefined shapes from a starting shape 
and the list goes on.. and it all starts with a line intersecting a polygon and the polygon being cut into two polygons. Before we go any further here are the screens of how the result will look.

After 1 cut
After two cuts
After 3 Cuts

Now lets get to the most important part.. Cutting a polygon into two pieces.

For each Edge in the polygon:
      if Cut bisects Edge
          Find point of intersection of Cut line and Edge of polygon.
         Add V0 of Edge to left polygon or right polygon based on whether it lies to left / right of Cut line.
         Add V1 of Edge to left polygon or right polygon based on which side it lies on to the Cut line.
         Add the Intersection Point to Left and Right polygons' vertex list.
        Find which side the Edge lies on to the Cut.
        Add the V0 and V1 of Edge to the corresponding polygon's vertex list.

Once you have done this we have two vertex lists one for the polygon to the right of the Cut and one to the left of the Cut. All we have to do now is to create polygon objects from the new vertices so they can be cut further.
I've been working a lot with Cocos2d-x recently so i've implemented it the same.. here is the archive of classes directory for the cocos2d-x project.

Screenshots of what you get when you run it..

The initial polygon in white, you can draw arbitrary lines to cut the polygon along that line. The newly created polygons are drawn in red and yellow.