The transformation can be done in several steps:
Step 1: Cut the polygon into triangles
Step 2: Cut each triangle into two right-angled triangles
Cut along the triangle's altitudes.
Step 3: Transform each right-angled triangle into a rectangle
Cut along the perpendicular bisector of one of the legs (not the hypotenuse). Attach the cut-off triangle to the remaining
trapezoid to form a rectangle.
Step 4: Transform all rectangles so that one of their sides is "roughly" equal
Say the area of our polygon is l^2, then we want to ensure all triangles have a side with a length between l and 2l. We can
achieve that by cutting our rectangles in half along the shorter (or longer) side and rearranging the pieces. Repeating this
process a number of times will give us the desired length for one of the sides.
Step 5: Transform all rectangles so that one of their sides has length l
Place the rectangle so that its top and bottom side has the length between l and 2*l. Now mark the point on the bottom side that is length l from the bottom left point away. From this point, perform a straight cut to the top left point of the rectangle. Now shift the right hand piece up along this diagonal until its right most edge is exactly above the previously marked point. On the top left side a traingle appears and on the bottom right a triangular hole of the same shape appears. Cut the triangle off and
place it into the hole.
Step 6: Stack all rectangles up
We stack them up along the sides with length l. We end up with a l-by-l square.
Step 7: Reverse Steps 1-6 for the target polygon
The steps 1-6 that we performed for our source triangle could be carried out equally for our target polygon. So what we have to do
now, is to cut our square into the exact pieces that it would have been cut into if we had done steps 1-6 for the target
polygon. Now we take these pieces and reverse steps 1-6 (starting with Step 6) for the target polygon. Like this our square becomes the target polygon.
For a slightly different procedure see posts by Art and Bractals.
Of course the above process is quite uneconomical in terms of the number of required cuts. Most likely there is a better generic algorithm to do the trick. Ideas anyone? And certainly for almost all (all?) specific polygon pairs there's a better way to do it.
|