■デルトイドの幾何学(その4)

 (その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

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