■n角の穴をあけるドリル(その2)

 ルーローの三角形の代わりに正2n−1角形を少し膨らませた同種の形(ルーローの多角形)は定幅図形なので,偶数角形の穴をあけることができました.しかし,少し膨らませた正2n角形のドリルは定幅図形にはならないため,正2n+1角形の穴に内接させるだけでもままなりません.

 また,正三角形の穴ではそれに内接しながら回転することできる円以外の図形(藤原・掛谷の2角形)が存在するのですが,正2n+1角形の場合はそのような図形も知られていません.

 今回のコラムでは「2n+1角形の穴をあける」問題に取り組んでみますが,ドリルは滑ることなく回転し,穴のすべての辺に内接するという条件を緩める必要がありそうです.そのような条件の下でおおよそ2n+1角形の穴をあける2n角形のドリルについて考えてみます.

===================================

【1】奇数角形の穴をあけるドリル

 正n角形(n:奇数)の頂点から底辺に下ろした垂線を対角線とする正(n−1)角形に,中心角が2π/n(n−1)の円弧で少し丸みをつけると,この頂点は正n角形の頂角2π/nにピッタリとはまり込みます.

 正(n−1)角形の頂点は正n角形に内接しませんし,残念ながら正n角形からわずかにはみ出してしまう頂点もあります.しかし,このことにはしばらく眼をつぶることにして,正n角形の頂角に連接する辺と正(n−1)角形の頂点が極めて近接していることに着目します.

 この節では,当該の頂点が正n角形の辺上を動くとき,正(n−1)角形の中心や他の頂点がどのような軌跡を描くのかを視覚化してみることにしました.以下に出力例を掲げます.

[1]三角の穴をあけるドリル

[2]五角の穴をあけるドリル

[3]七角の穴をあけるドリル

===================================

【2】雑感

 正三角形の中で回転する藤原・掛谷の2角形の中心は3つの楕円の弧をなす三角おむすび型の軌道を描いたことから,五角や七角の穴をあけるドリルの場合も中心の軌跡は楕円の弧を組み合わせた円もどきになるはずと予想していたのですが,驚いたことに,正(n−1)角形を天地逆転させたような軌道を描くことがわかりました.

 正(n−1)角形の各頂点の軌跡は,正n角形の頂点のところで大きくはみ出してしまい,n=5の場合,桜の花のような形の穴があいてしまいます.このはみ出しはn=5のとき最大になりますが,それでもおおよそ奇数角形の穴があけられそうです.なお,ここでは正(n−1)角形の頂点だけで円弧の運動は考慮していないため,円弧の形状を工夫することによってもっと正n角形の穴に近づけることは可能と思われました.

===================================

【3】プログラム

1000 '

1010 ' **** n-gonal drill ****

1020 ' 2005/12/10 (C) サトウ イクロウ

1030 SCREEN 3,0:CONSOLE ,,0,1

1040 CLS 3:WIDTH 80,25:COLOR 6

1050 PI=3.14159

1060 '

1070 PRINT "n-gonal hole"

1080 PRINT:PRINT "input n ( end=0 ).....";:INPUT N

1090 IF N<3 THEN 1250

1100 IF (N MOD 2)=0 THEN GOSUB *EVEN ELSE GOSUB *ODD

1110 '

1120 CLS 3

1130 WW=HH/2+1

1140 'WINDOW(-WW,-WW)-(WW,WW)

1150 'WINDOW(-WW,-WW*2)-(WW,0)

1160 WINDOW(-WW*1.1,-WW*2.1)-(WW*1.1,WW*.1)

1170 VIEW(120,0)-(519,399)

1180 GOSUB *FRAME

1190 GOSUB *TRACE

1200 WINDOW(0,0)-(639,399)

1210 VIEW(0,0)-(639,399)

1220 '

1240 GOSUB *TEMP

1250 SCREEN 3,0:CLS 3

1260 END

1270 '

1280 ' ***initialize ***

1290 '

1300 *EVEN:

1310 HH=10

1320 R1=HH/2/COS(PI/N)

1330 L1=R1*2*SIN(PI/N)

1340 YC=HH/2

1350 AA=HH

1360 R2=AA/2/SIN(PI/2*(N-2)/(N-1))

1370 L2=R2*2*SIN(PI/(N-1))

1380 BB=R2

1390 CC=R2

1400 YB=AA-BB

1410 T0=PI/(N-1)

1420 TT=PI*((N-2)/N-(N-3)/(N-1))

1430 TS=0:TE=TT/2

1440 RETURN

1450 '

1460 *ODD:

1470 HH=10

1480 R1=HH/(COS(PI/N)+1)

1490 L1=R1*2*SIN(PI/N)

1500 YC=R1*COS(PI/N)

1510 R2=HH/2

1520 L2=R2*2*SIN(PI/(N-1))

1530 AA=L2/2/SIN(PI/N/(N-1))

1540 BB=AA*COS(PI/N/(N-1))-R2*COS(PI/(N-1))

1550 CC=R2:IF N=3 THEN CC=AA/2

1560 YB=AA-BB

1570 T0=PI*2/N/(N-1)

1580 TT=PI*((N-2)/N-(N-3)/(N-1))

1590 TS=0:TE=TT/2

1600 '

1610 D2=(L2/2)^2+(AA*COS(PI/N/(N-1))-R2*2*COS(PI/(N-1)))^2

1620 DD=SQR(D2)

1630 T1=ATN(L2/2/(AA*COS(PI/N/(N-1))-R2*2*COS(PI/(N-1))))

1640 RETURN

1650 '

1660 '

1670 ' *** frame ***

1680 '

1690 *FRAME:

1700 XS=-L1/2:YS=-YC

1710 XE= L1/2:YE=-YC

1720 FOR I=0 TO N-1

1730 C1=COS(PI*2/N*I):S1=SIN(PI*2/N*I)

1740 X1= XS*C1-YS*S1

1750 Y1= XS*S1+YS*C1+YC

1760 X2= XE*C1-YE*S1

1770 Y2= XE*S1+YE*C1+YC

1780 LINE(X1,-Y1)-(X2,-Y2),5

1790 NEXT I

1800 '

1810 FOR I=0 TO N-2

1820 C1=COS(PI*2/(N-1)*I):S1=SIN(PI*2/(N-1)*I)

1830 '

1840 FOR T=-T0/2 TO T0/2 STEP PI/180

1850 C2=COS(T):S2=SIN(T)

1860 XW=0:YW=-AA

1870 X1= XW*C2-YW*S2

1880 Y1= XW*S2+YW*C2+AA

1890 '

1900 XW=X1:YW=Y1-YB

1910 X2= XW*C1-YW*S1

1920 Y2= XW*S1+YW*C1+YB

1930 PSET(X2,-Y2),7

1940 NEXT T

1950 '

1960 NEXT I

1970 RETURN

1980 '

1990 ' *** trace ***

2000 '

2010 *TRACE:

2020 FOR I=0 TO N-1

2030 C1=COS(PI*2/N*I):S1=SIN(PI*2/N*I)

2040 '

2050 FOR T=TS TO TE STEP PI/180

2060 IF (N MOD 2)=0 THEN GOSUB *Z0 ELSE GOSUB *Z1

2070 X= XW*C1-YW*S1

2080 Y= XW*S1+YW*C1+YC

2090 PSET(X,-Y),4

2100 '

2110 XW=-XW

2120 X= XW*C1-YW*S1

2130 Y= XW*S1+YW*C1+YC

2140 PSET(X,-Y),4

2150 NEXT T

2160 '

2170 NEXT I

2180 '

2190 GOTO 2390

2200 FOR I=0 TO N-1

2210 C1=COS(PI*2/N*I):S1=SIN(PI*2/N*I)

2220 '

2230 FOR T=TS TO TE STEP PI/180

2240 IF (N MOD 2)=0 THEN GOSUB *Z0 ELSE GOSUB *Z1

2250 X1=XW+CC*SIN(PI/(N-1)-T)

2260 Y1=YW-CC*COS(PI/(N-1)-T)

2270 '

2280 X= X1*C1-Y1*S1

2290 Y= X1*S1+Y1*C1+YC

2300 PSET(X,-Y),4

2310 '

2320 X1=-X1

2330 X= X1*C1-Y1*S1

2340 Y= X1*S1+Y1*C1+YC

2350 PSET(X,-Y),4

2360 NEXT T

2370 '

2380 NEXT I

2390 '

2400 FOR I=0 TO N-1

2410 C1=COS(PI*2/N*I):S1=SIN(PI*2/N*I)

2420 '

2430 FOR J=0 TO N-2

2440 FOR T=TS TO TE STEP PI/180

2450 IF (N MOD 2)=0 THEN GOSUB *Z0 ELSE GOSUB *Z1

2460 X1=XW+CC*SIN(PI/(N-1)-T+PI*2/(N-1)*J)

2470 Y1=YW-CC*COS(PI/(N-1)-T+PI*2/(N-1)*J)

2480 '

2490 X= X1*C1-Y1*S1

2500 Y= X1*S1+Y1*C1+YC

2510 PSET(X,-Y),4

2520 '

2530 X1=-X1

2540 X= X1*C1-Y1*S1

2550 Y= X1*S1+Y1*C1+YC

2560 PSET(X,-Y),4

2570 NEXT T

2580 NEXT J

2590 '

2600 NEXT I

2610 '

2620 XW=0:YW=(AA-BB)-YC

2630 FOR T=0 TO PI*2 STEP PI/180*10

2640 C1=COS(T):S1=SIN(T)

2650 X1= XW*C1-YW*S1

2660 Y1= XW*S1+YW*C1+YC

2670 PSET(X1,-Y1),7

2680 NEXT T

2690 RETURN

2700 '

2710 *Z0:

2720 'XW=AA*T-BB*SIN(T)

2730 XW=L2*COS(T0-T)-L1/2-L2*SIN(T0-T)/TAN(PI*2/N)-BB*SIN(T)

2740 YW=AA-BB*COS(T)-YC

2750 RETURN

2760 '

2770 *Z1:

2780 'XW=AA*T-BB*SIN(T)

2790 XW=DD*SIN(T1+T)-(DD*COS(T1+T)-AA+HH)/TAN(PI/N)-BB*SIN(T)

2800 YW=AA-BB*COS(T)-YC

2810 RETURN

2820 '

2830 *TEMP:

2840 LOCATE 0,0 :PRINT "何かキーを押してください";:WHILE INKEY$="":WEND

2850 RETURN

===================================