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 nondegenerate 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 10gon;
1 square; 2 8gons;
1 square; 1 hexagon; 1 12gon;
1 square; 1 pentagon; 1 20gon;
4 squares;
1 triangle; 2 12gons;
1 triangle; 1 8gon; 1 24gon;
1 triangle; 1 9gon; 1 18gon;
1 triangle; 1 10gon; 1 15gon;
1 triangle; 2 squares; 1 hexagon;
2 triangles; 2 hexagons;
2 triangles; 1 square; 1 12gon;
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 7gon and a 22gon 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 AZ
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)) < 1E12 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 20040712 13:16:27 