Take a polygon with area S1 and pick a number r in [0,1/2]. Take vertex A that connects sides AB and AC and add points M and N on these sides so that AM/AB=AN/AC=r. Cut corner A along MN. Cut all other corners the same way.
After repeating these steps infinite times we will get a figure with an area S2. Let's F(r)=S2/S1. It's clear that F(0)=1 and F(½)=0.
Questions:
(a) What is this function for square?
(b) What is this function for equilateral triangle?
(c) Is it possible to get a circle from a square or from an equilateral triangle this way?
(d) Is it possible that this function is universal for all triangles, or for all rectangles, or for all polygons?
The following program in VB 5.0 (only the algorithmic part shown) keeps track of the x and y coordinates of 14 generations of polygon starting with each of equilateral triangle, square and regular pentagon, with r (variable called frac) varying from .01 to .49 at intervals of .02. The area of each is found by Heron's formula applied to a breakdown of the polygon into triangles with one vertex at the center and one edge coincident with an edge of the polygon. The area is then divided by the area of the original triangle, square or pentagon.
Dim x(1000000), y(1000000), xNew(1000000), yNew(1000000)
Dim pi, dr, areaOrig, frac, sides
Private Sub cmdStart_Click()
Open "cutting corners.txt" For Output As #2
pi = Atn(1) * 4: dr = pi / 180
For sidesOrig = 3 To 5
For frac = 0.01 To 0.49 Step 0.02
sides = sidesOrig
incr = 360 / sides
For i = 1 To sides
angle = i * incr
x(i) = Cos(angle * dr): y(i) = Sin(angle * dr)
Next
areaOrig = area()
For i = 1 To 14
Call divvyIt
DoEvents
Next
Print #2, sidesOrig, frac, area() / areaOrig
Next
Next
Close
End Sub
Function area()
a = 0
For i = 1 To sides
s1 = Sqr(x(i) * x(i) + y(i) * y(i))
ip1 = i + 1: If ip1 > sides Then ip1 = 1
s2 = Sqr(x(ip1) * x(ip1) + y(ip1) * y(ip1))
xd = x(i) - x(ip1): yd = y(i) - y(ip1)
s3 = Sqr(xd * xd + yd * yd)
s = (s1 + s2 + s3) / 2
a = a + Sqr(s * (s - s1) * (s - s2) * (s - s3))
Next
area = a
End Function
Sub divvyIt()
For i = 1 To sides
ip1 = i + 1: If ip1 > sides Then ip1 = 1
im1 = i - 1: If im1 < 1 Then im1 = sides
xNew(i * 2 - 1) = x(i) * (1 - frac) + x(im1) * frac
yNew(i * 2 - 1) = y(i) * (1 - frac) + y(im1) * frac
xNew(i * 2) = x(i) * (1 - frac) + x(ip1) * frac
yNew(i * 2) = y(i) * (1 - frac) + y(ip1) * frac
Next
sides = 2 * sides
For i = 1 To sides
x(i) = xNew(i): y(i) = yNew(i)
Next
sides = sides
End Sub
The results are:
n r area ratio
3 0.01 0.999694002448065
3 0.03 0.997138618058553
3 0.05 0.991758241758228
3 0.07 0.983287858117326
3 0.09 0.971492257156317
3 0.11 0.956180589088248
3 0.13 0.937221396737034
3 0.15 0.914556962053026
3 0.17 0.88821557513045
3 0.19 0.858320251407409
3 0.21 0.825092544080909
3 0.23 0.788850453087247
3 0.25 0.750000000931304
3 0.27 0.709020756711921
3 0.29 0.666446325560179
3 0.31 0.622841444882343
3 0.33 0.578777720820273
3 0.35 0.534810126733177
3 0.37 0.49145616646746
3 0.39 0.449179140522402
3 0.41 0.408376349133236
3 0.43 0.369372442019184
3 0.45 0.332417582417581
3 0.47 0.297689699025004
3 0.49 0.265299877600972
4 0.01 0.999796001631998
4 0.03 0.998092412038989
4 0.05 0.994505494505502
4 0.07 0.988858572078206
4 0.09 0.980994838104205
4 0.11 0.970787059392139
4 0.13 0.95814759782472
4 0.15 0.943037974702018
4 0.17 0.925477050086977
4 0.19 0.905546834271634
4 0.21 0.883395029387269
4 0.23 0.859233635391501
4 0.25 0.833333333954223
4 0.27 0.806013837807946
4 0.29 0.777630883706801
4 0.31 0.748560963254881
4 0.33 0.719185147213503
4 0.35 0.689873417822104
4 0.37 0.660970777644983
4 0.39 0.632786093681606
4 0.41 0.605584232755492
4 0.43 0.579581628012783
4 0.45 0.554945054945063
4 0.47 0.531793132683342
4 0.49 0.510199918400665
5 0.01 0.999859040594551
5 0.03 0.998681889137223
5 0.05 0.996203390079002
5 0.07 0.992301462647655
5 0.09 0.986867756110856
5 0.11 0.979814354495635
5 0.13 0.971080701352272
5 0.15 0.960640208553128
5 0.17 0.94850590808105
5 0.19 0.934734467654193
5 0.21 0.919427946935218
5 0.23 0.902732834291905
5 0.25 0.88483616615817
5 0.27 0.865958858598862
5 0.29 0.846346719665549
5 0.31 0.826259898658383
5 0.33 0.805961708997442
5 0.35 0.7857078021225
5 0.37 0.765736568942403
5 0.39 0.7462614313048
5 0.41 0.727465407683486
5 0.43 0.709498049704287
5 0.45 0.692474596397636
5 0.47 0.676477011567258
5 0.49 0.661556467461076
In the case of n = 3 (triangle), the limit as r approaches 1/2 is, as expected, 1/4; for squares (n=4), 1/2. The limit for pentagons is a little harder. It obviously has overshot 2/3, so it's not that. The formula for the limit as r approaches 1/2 starting with a regular n-gon is sin^2 (90 - 180/n). So for a pentagon that's (sin(54))^2 ~= .6545084971874737.
The only recognizeably rational number above is for the triangle, with r = 1/4, where the ratio of the areas is 3/4, with the value shown, 0.750000000931304, giving an indication of the lack of accuracy caused by stopping after 14 iterations. (I'm actually assuming here that the exact value should be 3/4--I don't have a proof).
|
Posted by Charlie
on 2007-02-28 21:39:56 |