(その2)では2n+1個の尖点をもつ星状図形の接線が曲線に挟まれる部分の長さlは,点Pをこの曲線上の任意の点とすると,点Pが尖点上にあるとき接線の長さは最大になること,同じことであるが弧の中間点にあるとき最小になることを説明なしに述べた.
そして,点Pが弧の中間点にあるときの接線の長さは,nを大きくすれば次第に1に近づくことになり「長さが1である線分を1回転させるのに必要な最小面積」を与える近似図形になる.
すなわち,この星状領域はデルトイドのように接線の長さが一定という決定的な性質をもつ領域に近づくことになり,星状掛谷集合の下限は
K2=(5−2√2)π/24(.284258)
と予想されるというわけである.今回のコラムではこの計算結果をプログラムとともに紹介する.
===================================
【1】接線と接線の長さ
中心が(r,d)の半径dの円弧上の点P(x0,y0)における接線の方程式は
(x−r)^2+(y−d)^2=d^2
を微分して,接線の傾きを
dy/dx=−(x0−r)/(y0−d)=m
として
y=m(x−x0)+y0
で与えられる.
この接線が交わる円弧は,この円弧を
α=2nθ,2(n+1)θ θ=π/(2n+1)
だけ回転させたものであるから,
[xc]=[cosα,−sinα][r]
[yc] [sinα, cosα][d]
を中心(xc,yc)とする半径dの円弧
(x−xc)^2+(y−yc)^2=d^2
である.
これに
y=m(x−x0)+y0
を代入,2次方程式を解いて,交点P1(x1,y1),P2(x2,y2)を求めることになる.
接線の長さlは
l={(x1−x2)^2+(y1−y2)^2}^(1/2)
で与えられるが,たとえば3尖点星状領域(n=1)の場合,点Pを尖点上からこの中間点に向かって動かすときの接線の長さは次第に短くなることが示される.
t l l/r
0 1 1.26795
-.0174533 .99044 1.25583
-.0349066 .981296 1.24423
-.0523598 .97265 1.23327
-.0698131 .964466 1.22289
-.0872664 .956724 1.21308
-.10472 .949398 1.20379
-.122173 .942475 1.19501
-.139626 .935941 1.18673
-.15708 .929779 1.17891
-.174533 .923977 1.17156
-.191986 .918524 1.16464
-.209439 .913407 1.15815
-.226893 .908617 1.15208
-.244346 .904146 1.14641
-.261799 .899984 1.14113
-.279252 .896124 1.13624
-.296706 .892559 1.13172
-.314159 .889281 1.12756
-.331612 .886286 1.12377
-.349066 .883568 1.12032
-.366519 .881123 1.11722
-.383972 .878946 1.11446
-.401425 .877034 1.11203
-.418879 .875382 1.10994
-.436332 .87399 1.10817
-.453785 .872854 1.10673
-.471239 .871972 1.10562
-.488692 .871343 1.10482
-.506145 .870966 1.10434
-.523598 .87084 1.10418
なお,半径3/4の円に内接するデルトイドの場合,接線の長さは1で一定である.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
また,点Pが弧の中間点にあるときの接線の長さは,nを大きくすれば1に次第に近づくことになる.数値計算ではnを大きくすると数値計算誤差のため,計算結果が揺らいでしまうが,この様子を窺い知ることはできるだろう.
n l l/r
1 .87084 1.10418
2 .958013 1.14819
3 .979092 1.15976
4 .98747 1.16445
5 .991642 1.1668
6 .994045 1.16818
7 .995519 1.169
8 .996509 1.16957
9 .997219 1.16998
10 .9977 1.17024
20 .999471 1.17131
30 .999491 1.17114
40 .999609 1.17121
50 1.00008 1.17172
60 .998292 1.16961
70 .999244 1.17072
80 .997806 1.16903
90 .99679 1.16783
100 1.00001 1.1716
このとき,r→(2+√2)/4であるから
l/r → 2(2−√2)=1.17157
なお,デルトイドの場合,r=4/3,l=1であるから
l/r=4/3=1.33333
この星状領域はデルトイドのように接線の長さが一定という決定的な性質をもつ領域に近づくことになり,星状掛谷集合の下限は
K2=(5−2√2)π/24(.284258)
と予想されるというわけである.
===================================
【2】プログラム
1000 '
1010 ' **** stellate ****
1020 ' 2006/08/02 (C) サトウ イクロウ
1030 SCREEN 3,0:CONSOLE ,,0,1
1040 CLS 3:WIDTH 80,25:COLOR 6
1050 PI=3.14159
1060 'GOSUB *STELLATE:END
1070 'GOSUB *TANGENT.2:END
1080 '
1090 PRINT "(2n+1)-stellate"
1100 PRINT:PRINT "input n ( end=0 ).....";:INPUT N
1110 IF N<1 THEN 1240
1120 GOSUB *INITIALIZE
1130 '
1140 CLS 3
1150 WW=R0*1.2
1160 WINDOW(-WW,-WW)-(WW,WW)
1170 VIEW(120,0)-(519,399)
1180 GOSUB *TRACE
1190 WINDOW(0,0)-(639,399)
1200 VIEW(0,0)-(639,399)
1210 '
1230 GOSUB *TEMP
1240 SCREEN 3,0:CLS 3
1250 END
1260 '
1270 ' ***initialize ***
1280 '
1290 *INITIALIZE:
1300 TT=PI/(N*2+1)
1310 C0=COS(TT)
1320 S0=SIN(TT)
1330 T0=TAN(TT)
1340 R0=(1+SQR(1+1/C0)/(1+1/C0))/2
1350 D0=R0*(C0+1)/S0
1360 X0=(1-R0)*C0
1370 Y0=(1-R0)*S0
1380 T1=ATN((R0-X0)/(D0-Y0))
1390 RETURN
1400 '
1410 *STELLATE:
1420 PFILE$="scrn:"
1440 OPEN PFILE$ FOR OUTPUT AS #1
1450 FOR N=1 TO 10
1460 GOSUB *STELLATE.SUB
1470 PRINT #1,N,R0,SS
1480 NEXT N
1490 FOR N=20 TO 100 STEP 10
1500 GOSUB *STELLATE.SUB
1510 PRINT #1,N,R0,SS
1520 NEXT N
1530 PRINT #1,(2+SQR(2))/4
1540 PRINT #1,(5-2*SQR(2))/24*PI
1550 PRINT #1,PI/8,PI/11
1560 CLOSE #1
1570 RETURN
1580 '
1590 *STELLATE.SUB:
1600 GOSUB *INITIALIZE
1610 S1=1/2*R0*R0*(T0-TT)
1620 S2=1/2*(R0-X0)*(D0-R0*T0)
1630 S3=1/2*D0*D0*T1-S1-S2
1640 SS=PI*R0*R0-2*(N*2+1)*S3
1650 RETURN
1660 '
1670 *TANGENT.2:
1680 PFILE$="scrn:"
1700 OPEN PFILE$ FOR OUTPUT AS #1
1710 FOR N=1 TO 10
1720 GOSUB *INITIALIZE
1730 T=-TT/2:GOSUB *LT
1740 PRINT #1,N,L0,L0/R0
1750 NEXT N
1760 FOR N=20 TO 100 STEP 10
1770 GOSUB *INITIALIZE
1780 T=-TT/2:GOSUB *LT
1790 PRINT #1,N,L0,L0/R0
1800 NEXT N
1810 PRINT #1,(2-SQR(2))*2
1820 CLOSE #1
1830 RETURN
1840 '
1850 *TANGENT.1:
1860 PFILE$="scrn:"
1880 OPEN PFILE$ FOR OUTPUT AS #1
1890 T=0:L0=1
1900 PRINT #1,T,L0,L0/R0
1910 FOR T=0 TO -TT/2 STEP -PI/180
1920 IF T=0 THEN 1950
1930 GOSUB *LT
1940 PRINT #1,T,L0,L0/R0
1950 NEXT T
1960 T=-TT/2:GOSUB *LT
1970 PRINT #1,T,L0,L0/R0
1980 CLOSE #1
1990 RETURN
2000 '
2010 ' *** length of tangent ***
2020 '
2030 *LT:
2040 C2=COS(T):S2=SIN(T)
2050 XW=0:YW=-D0
2060 X1= XW*C2-YW*S2+R0
2070 Y1= XW*S2+YW*C2+D0
2080 ALF=TT*N*2 :GOSUB *LT.SUB:X3=LARGE:Y3=M0*(X3-X1)+Y1
2090 ALF=TT*(N+1)*2:GOSUB *LT.SUB:X4=SMALL:Y4=M0*(X4-X1)+Y1
2100 L0=SQR((X3-X4)^2+(Y3-Y4)^2)
2110 RETURN
2120 '
2130 *LT.SUB:
2140 C1=COS(ALF):S1=SIN(ALF)
2150 X2=C1*R0-S1*D0
2160 Y2=S1*R0+C1*D0
2170 M0=-(X1-R0)/(Y1-D0)
2180 A=1+M0*M0
2190 B=2*(-X2)+2*M0*(-M0*X1+Y1-Y2)
2200 C=(-X2)^2+(-M0*X1+Y1-Y2)^2-D0*D0
2210 LARGE=(-B+SQR(B*B-A*C*4))/A/2
2220 SMALL=(-B-SQR(B*B-A*C*4))/A/2
2230 RETURN
2240 '
2250 ' *** circle ***
2260 '
2270 *CIRC:
2280 XW=RR:YW=0
2290 FOR T=0 TO PI*2 STEP PI/180
2300 C1=COS(T):S1=SIN(T)
2310 X1= XW*C1-YW*S1
2320 Y1= XW*S1+YW*C1
2330 PSET(X1,-Y1),5
2340 NEXT T
2350 RETURN
2360 '
2370 ' *** trace ***
2380 '
2390 *TRACE:
2400 RR=R0:GOSUB *CIRC
2410 GOSUB *STILL
2420 'RR=R0 :GOSUB *DELTOID
2430 RR=3/4:GOSUB *DELTOID
2440 'GOSUB *TANGENT.1
2450 RETURN
2460 '
2470 *STILL:
2480 FOR I=0 TO N*2
2490 'C1=COS(TT*2*I):S1=SIN(TT*2*I)
2500 C1=COS(TT*N*2*I):S1=SIN(TT*N*2*I)
2510 '
2520 FOR T=0 TO -TT STEP -PI/180
2530 C2=COS(T):S2=SIN(T)
2540 XW=0:YW=-D0
2550 X1= XW*C2-YW*S2+R0
2560 Y1= XW*S2+YW*C2+D0
2570 '
2580 XW=X1:YW=Y1
2590 X2= XW*C1-YW*S1
2600 Y2= XW*S1+YW*C1
2610 PSET(X2,-Y2),7
2620 NEXT T
2630 '
2640 NEXT I
2650 RETURN
2660 '
2670 *DELTOID:
2680 IF N<>1 THEN 2750
2690 GOSUB *CIRC
2700 FOR T=0 TO PI*2 STEP PI/180
2710 X1=(2*COS(T)+COS(2*T))*RR/3
2720 Y1=(2*SIN(T)-SIN(2*T))*RR/3
2730 PSET (X1,-Y1),5
2740 NEXT T
2750 RETURN
2760 '
2770 *TEMP:
2780 LOCATE 0,0 :PRINT "何かキーを押してください";:WHILE INKEY$="":WEND
2790 RETURN
===================================