Three regular polygons, all with unit sides, share a common vertex and are all coplanar. Each polygon has a different number of sides, and each polygon shares a side with the other two; there are no gaps or overlaps. Find the number of sides for each polygon. There are multiple answers.
(In reply to
solution by Thalamus)
The nine listed non-degenerate cases do seem to be exhaustive, with computer confirmation. The program did not limit itself to only 3 polygons meeting at the vertex (even though the problem specified only 3), but within the output, only the previously found nine cases had just 3 polygons meeting.
The complete list when not limited to threesomes is:
3 hexagons;
2 pentagons; 1 10-gon;
1 square; 2 8-gons;
1 square; 1 hexagon; 1 12-gon;
1 square; 1 pentagon; 1 20-gon;
4 squares;
1 triangle; 2 12-gons;
1 triangle; 1 8-gon; 1 24-gon;
1 triangle; 1 9-gon; 1 18-gon;
1 triangle; 1 10-gon; 1 15-gon;
1 triangle; 2 squares; 1 hexagon;
2 triangles; 2 hexagons;
2 triangles; 1 square; 1 12-gon;
3 triangles; 2 squares;
4 triangles; 1 hexagon;
6 triangles;
3 60
4 90
5 108
6 120
7 128.5714285714286
8 135
9 140
10 144
11 147.2727272727273
12 150
13 152.3076923076923
14 154.2857142857143
15 156
16 157.5
17 158.8235294117647
18 160
19 161.0526315789474
20 162
21 162.8571428571429
22 163.6363636363636
23 164.3478260869565
24 165
I note that a 7-gon and a 22-gon would produce together an exact number of degrees. It happens that what's left can't form an angle of a regular polygon, but it would take some consideration.
The program considered all possible combinations of zero to as many would fit in 360 degrees of triangles through hexagons. Then upon each, with whatever is left of 360 degrees, attempt to place one or two (possibly equal) angles larger than 120 degrees. As mentioned, the program left to the operator the task of selecting out those with three angles meeting at the vertex. The program is
DEFDBL A-Z
FOR i = 3 TO 24
t = i * 180 - 360
a = t / i
PRINT i, a
NEXT
FOR tr = 0 TO 6
FOR sq = 0 TO (360 - 60 * tr) / 90
TrSq = 60 * tr + 90 * sq
FOR pent = 0 TO (360 - TrSq) / 108
TrSqPe = TrSq + 108 * pent
FOR hx = 0 TO (360 - TrSqPe) / 120
degUsed = TrSqPe + 120 * hx
reported = 0
IF degUsed = 360 THEN
GOSUB reportToHex
PRINT
ELSE
IF degUsed > 0 THEN
remain = 360 - degUsed
IF remain <> 180 THEN
i = 360 / (180 - remain)
IF i = INT(i) AND i > 6 THEN
GOSUB reportToHex
PRINT "1"; STR$(i); "-gon; "
END IF
END IF
i = 360 / (180 - remain / 2)
IF i = INT(i) AND i > 6 THEN
GOSUB reportToHex
PRINT "2"; STR$(i); "-gons; "
END IF
FOR j = 7 TO i - 1
t = j * 180 - 360
a1 = t / j
a2 = remain - a1
IF a2 < 180 THEN
IF ABS(a2 - INT(a2 + .5)) < 1E-12 THEN
GOSUB reportToHex
PRINT "1"; STR$(j); "-gon; ";
PRINT "1"; STR$(360 / (180 - a2)); "-gon; "
END IF
END IF
NEXT
END IF
END IF
NEXT hx
NEXT pent
NEXT sq
NEXT tr
END
reportToHex:
IF tr = 1 THEN PRINT " 1 triangle; "; : ELSE IF tr > 0 THEN PRINT tr; "triangles; ";
IF sq = 1 THEN PRINT " 1 square; "; : ELSE IF sq > 0 THEN PRINT sq; "squares; ";
IF pent = 1 THEN PRINT " 1 pentagon; "; : ELSE IF pent > 0 THEN PRINT pent; "pentagons; ";
IF hx = 1 THEN PRINT " 1 hexagon; "; : ELSE IF hx > 0 THEN PRINT hx; "hexagons; ";
RETURN
|
Posted by Charlie
on 2004-07-12 13:16:27 |