■α−14面体・β−14面体の木工製作(その2)

 α-14面体を積み上げて空間を充填するときにはすべての多面体の長軸を平行にとる平行移動するだけで3次元空間を埋めつくす充填ですが,β-14面体を積み上げて空間を充填するときには1段ごとにその長軸方向を直交させることになります.すなわち,β-14面体による空間充填は,5角形面のほうから平面に投射した形を考えてみると「カイロのタイル貼り」と呼ばれる平面充填配列の3次元版と考えることができます.

 平面のカイロのタイル貼りでは5角形4枚で扁平な6角形を形作るのですが,このとき,6角形の内角を120°とすると,5角形は底角と頂角が120°,それに挟まれる角が90°の歪んだ等辺5角形であり,正方形と正三角形によるアルキメデスの平面充填形の双対として得られるものになります.

 カイロのタイル貼りは扁平な6角形を辺同士が直交するように重ね合わせたものと見ることができるのですが,6角形の形の違いに応じてカイロのタイル貼りは無数に存在することになります.

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

【1】β−14面体の平面近似体の計量

 高さと幅と長さが2:2W:2Lの寸法の直方体のブロックを用いて切稜を行うことにします.その際,2W×2L面に5角形4枚(δ面2枚,ε面2枚)からなる扁平な6角形が投影されるとして,投影された6角形の内角で,2つの正方形面を連結する6辺形の挟む二面角を120°とします.

 また,正方形の1辺の長さをdとして,ブロックの表面にある

  A(0,W,d)

  B(d,0,1)

が5角形の頂点,

  C(L,d,d)

が正方形の頂点になるように切稜を行います.

 切稜によって新たにできる5角形の頂点を

  D(x,y,z)

とすると,(x,y,z)は投影面にある3本の直線の交点として与えられますから,2W×2L面では

  y−W=(d−W)/L・x

  (d−W)/L=−1/√3  (120°)

より,

  d−W=−L/√3

  x/√3+y=W

 2×2L面では

  z−1=(d−1)/(L−d)・(x−d)

2×2W面では

  z−1=(d−1)/W・y

なる式が得られますが,両者の二面角が等しいことより

  L−d=W,x−d=y

 連立方程式

  d−W=−L/√3

  d+W=L

および

  x/√3+y=W

  x−y=d

を解くと,Lをパラメータとして

  W=(1+1/√3)/2・L

  d=(1−1/√3)/2・L

  x=(3−√3)/2・L

  y=(2−√3+1/√3)/2・L

  z=(3−2√3+1/√3)・L+2√3−3

が求められます.

  AD^2=f^2=x^2+(y−W)^2+(z−d)^2

  BD^2=g^2=(x−d)^2+y^2+(z−1)^2

  CD^2=h^2=(x−L)^2+(y−d)^2+(z−d)^2

  δ面の頂角:cosφ1={−x^2+(y−W)^2+(z−d)^2}/f^2

  δ面の底角:cosθ1=−(x−d)/g

  ε面の頂角:cosφ2={(x−d)^2−y^2+(z−1)^2}/g^2

  ε面の底角:cosθ2=−(y−d)/h

 (その1)で作成した多面体はL=√2ですから,

   W=1.11536,d=0.298858

      δ面       ε面

  辺長  1.08521     .925047

      .925047     .680552

      .597717     .597717

  頂角  111.416     80.5036

  底角  130.254     116.049

 特に頂角はδ面では鈍角(114.416°)であるのに対して,ε面では鋭角(80.5036°)という開きがあります.このようにδ面とε面の形はかなり食い違っています.

 なお,2×2L面と2×2W面に投影された二面角を120°,

  (d−1)/(L−d)=(d−1)/W=−1/√3  (120°)

とすることもできるのですが,2W×2L面に投影された二面角を120°とした場合よりも方程式が複雑になってしまいました.

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

【2】β−14面体の最小2乗平面近似

 δ面とε面の合同条件として,底辺を除く4辺の長さが等しいことよりf=g=hが成り立つ必要があります.これらはLの2次方程式となるのですが,残念ながらこれらを同時に満足させるLは存在しないことがわかりました.

 さらに,5角形が合同になるためには対応する頂角・底角が等しいという条件が成り立たなくてはなりませんが,こうなるとますます合同のための条件は厳しくなります.

 そこで方針を変えて,ここではδ面とε面の形が最も近くなる切稜角とブロックの大きさの組み合わせを最小2乗法で探索することにします.ただし,これまで通り六角形面は対称,矩形面は正方形であるという条件をおくことにします.そうしないと形の美しさが損なわれるだけでなく,探索するにしてもきりがないからです.

 また,前節では2W×2L面に投影された6角形の内角で,2つの正方形面を連結する6辺形の挟む二面角が120°になるという条件をおきましたが,これは可変とします.一般に切稜角をφとおいて,

  (d−W)/L=−tanφ

とすることもできます.その場合,2組の連立方程式は

  d−W=−Ltanφ

  d+W=L

  xtanφ+y=W

  x−y=d

となります.

 δ面とε面の底辺の中心を原点におくと,各頂点の座標は

        δ面             ε面

  A:(0,fcos(φ1/2)+gsinθ1) (0,gcos(φ2/2)+hsinθ2)

  B:(-fsin(φ1/2),gsinθ1) (-gsin(φ2/2),hsinθ2)

  C:(-d,0) (-d,0)

  D:(d,0) (d,0)

  E:(fsin(φ1/2),gsinθ1) (gsin(φ2/2),hsinθ2)

となります.

 そこで,最小化する目的関数sを

  s=[{fcos(φ1/2)+gsinθ1-gcos(φ2/2)-hsinθ2}^2+2{fsin(φ1/2)-gsin(φ2/2)}^2+2{gsinθ1-hsinθ2}^2]/4d^2

として計算すると,2つの方向に収束することがわかりました.

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

[1]二面角の上限を120°に制限すると,Lは大きくなり,2W×2L面の切稜角は30°,2×2L面と2×2W面の切稜角は0(0.132768°)に,

   L=4.69145,W=3.70002,d=0.991426

δ面,ε面はそれぞれ

      δ面       ε面

  辺長  3.43438 2.80416

      2.80416 .98283

      1.98285 1.98285

  頂角  120 90

  底角  135 120

に近づきました.この極限形は歪んだ六角柱であり,柱というよりは板に近いことから,2W×2L面に投影された形がカイロのタイル貼りに近づく方向に収束することを意味しています.

 ちなみに,二面角の上限を120°に制限したまま,Lの上限をL=√2あるいは2に制限すると

  L=√2,W=1.11535,d=0.298856,切稜角=32.1549°

      δ面       ε面

  辺長  1.0852      .925041

      .925041     .680548

      .597713     .597713

  頂角  111.416     80.5034

  底角  130.252     116.049

  L=2,W=1.57735,d=0.42263,切稜角=20.1039°

      δ面       ε面

  辺長  1.48842      1.23482

      1.23482      .88675

      .8453      .8453

  頂角  116.833      86.4006

  底角  133.2      118.465

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

[2]一方,二面角を可変にすると2W×2L面の切稜角は45°(44.8213°),2×2L面と2×2W面の切稜角は23.2502°に,底辺の長さは0に収束するのですが,このときの極限形は歪んだ菱形十二面体です.

   L=2.30694,W=2.29970,d=7.17381E-03

      δ面       ε面

  辺長  1.70512 1.70028

      1.70028 1.69542

      .143476 .143476

  頂角  85.4664 85.1101

  底角  132.555 132.377

 さらにLの上限を1に制限すると,

   L=1,W=1,d=0,切稜角=45°

      δ面       ε面

  辺長  .863279 .86329

      .86329 .863302

      0 0

  頂角  70.3972 70.3994

  底角  125.2 125.201

 菱形十二面体の頂角は

   2arctan(1/√2)=70.5288

となりますから,立方体を45°切稜したこの立体は菱形十二面体に収束していることがわかります.

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

【3】雑感

 β−14面体の最適平面近似が得られなかったのは,

  (1)六角形面は対称,矩形面は正方形であるという条件をおいたこと,

  (2)設定した目的関数の振る舞いが悪いため

だと考えられます.いずれ再検討を加えたいと思います.

 底辺の長さが0に近づくときの極限形が菱形十二面体,切稜角が0に近づくときの極限が六角柱となることから,β−14面体は六角柱と菱形十二面体の中間に位置する多面体と位置づけることができます.5角形面を合同にすることはできませんでしたが,このこと自体は面白い結果であると思われます.

 昨年,東京都荒川区南千住の乙部融朗住職(円通寺)を訪問した際,立方体(四角六面体)が菱形十二面体(四角十二面体)に,菱形十二面体が正十二面体(五角十二面体)に連続して変化するアイディア満載の遷移図形の模型を見せていただいきましたが,そのことが思い出されました.

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

【4】プログラム

1000 '

1010 ' **** BETA 14-HEDRON (B14) ****

1020 ' 2006/01/16 (C) サトウ イクロウ

1030 ON STOP GOSUB *STOP.RTN:STOP ON

1040 SCREEN 3,0:CONSOLE ,,0,1

1050 CLS 3:WIDTH 80,25:COLOR 6

1060 GOSUB *INITIALIZE

1070 GOSUB *SIMPLEX

1080 END

1090 '

1100 *STOP.RTN:

1110 CLOSE:SCREEN 3,0:CONSOLE ,,0,1:CLS 3

1120 STOP

1130 '

1140 ' *** 初期設定 ***

1150 '

1160 *INITIALIZE:

1170 PI=3.14159

1180 '

1190 'N=4

1200 M=2

1210 'N1=N*4

1220 '

1230 'DIM X(N1),Y(N1),Z(N1)

1240 'DIM XX(N1),YY(N1),ZZ(N1)

1250 DIM P(M),PL(M),PU(M)

1260 DIM Q(M),CN(M)

1270 DIM VX(M+1,M),SS(M+1)

1280 DIM VR(M),VC(M),VE(M)

1290 '

1300 P(1)=SQR(2)

1310 P(2)=1/2

1320 '

1330 CN(1)=3:CN(2)=3

1340 PL(1)=1:PU(1)=10

1350 PL(2)=TAN(PI/12):PU(2)=TAN(PI/6)

1360 'PL(2)=TAN(PI/12):PU(2)=TAN(PI/3)

1370 RETURN

1380 '

1390 ' ** PENTAGON **

1400 '

1410 *PENTAGON:

1420 L=P(1)

1430 T=P(2)

1440 '

1450 W=(1+T)/2*L

1460 D=(1-T)/2*L

1470 X=L/(1+T)

1480 Y=(1+T*T)/(1+T)/2*L

1490 Z=(1+T*T)*(1-T)/(1+T)^2/2*L+T/(1+T)^2*2

1500 '

1510 F2=X^2+(Y-W)^2+(Z-D)^2

1520 G2=(X-D)^2+Y^2+(Z-1)^2

1530 H2=(X-L)^2+(Y-D)^2+(Z-D)^2

1540 F=SQR(F2)

1550 G=SQR(G2)

1560 H=SQR(H2)

1570 '

1580 C11=(-X^2+(Y-W)^2+(Z-D)^2)/F2

1590 C10=SQR((1+C11)/2)

1600 S10=SQR((1-C11)/2)

1610 C12=-(X-D)/G

1620 S12=SQR(1-C12*C12)

1630 C=C11:T11=ATN(SQR(1-C*C)/C):IF C<0 THEN T11=PI+T11

1640 C=C12:T12=ATN(SQR(1-C*C)/C):IF C<0 THEN T12=PI+T12

1650 '

1660 C21=((X-D)^2-Y^2+(Z-1)^2)/G2

1670 C20=SQR((1+C21)/2)

1680 S20=SQR((1-C21)/2)

1690 C22=-(Y-D)/H

1700 S22=SQR(1-C22*C22)

1710 C=C21:T21=ATN(SQR(1-C*C)/C):IF C<0 THEN T21=PI+T21

1720 C=C22:T22=ATN(SQR(1-C*C)/C):IF C<0 THEN T22=PI+T22

1730 RETURN

1740 '

1750 ' ** PENTAGON PROFILE **

1760 '

1770 *PROFILE:

1780 PRINT:PRINT

1790 PRINT "L=";L

1800 PRINT "W=";W

1810 PRINT "D=";D

1820 PRINT "cut angle(1)=";ATN(T)*180/PI

1830 PRINT "cut angle(2)=";ATN((1-D)/W)*180/PI

1840 PRINT

1850 PRINT " "," PENTAGON(1)"," PENTAGON(2)"

1860 PRINT "edge (1) ",F,G

1870 PRINT "edge (2) ",G,H

1880 PRINT "edge (3) ",D*2,D*2

1890 PRINT "angle(1)",T11*180/PI,T21*180/PI

1900 PRINT "angle(2)",T12*180/PI,T22*180/PI

1910 PRINT

1920 RETURN

1930 '

1940 ' ** SUM of RESIDUALS **

1950 '

1960 *RESIDUAL:

1970 GOSUB *PENTAGON

1980 SS=(F*C10+G*S12-G*C20-H*S22)^2+2*(F*S10-G*S20)^2+2*(G*S12-H*S22)^2

1990 SS=SS/D/D/4

2000 RETURN

2010 '

2020 ' *** FINAL OUTPUT ***

2030 '

2040 *FINAL:

2050 SN=SS(IL)

2060 CLS 3

2070 PRINT "LOOP=";LOOP

2080 PRINT

2090 PRINT "PARAMETERS: "

2100 FOR I=1 TO M

2110 PRINT "P(";I;")=";P(I)

2120 NEXT I

2130 PRINT

2140 PRINT "RESIDUALS=";SN

2150 PRINT

2160 GOSUB *PROFILE

2170 '

2180 'PRINT

2190 'PRINT "何かキーを押してください"

2200 'WHILE INKEY$="":WEND

2210 RETURN

2220 '

2230 ' *** シンプレックス法 ***

2240 '

2250 *SIMPLEX:

2260 LMAX=1000

2270 LOOP=0

2280 '

2290 VAA=1 :'[reflection]

2300 VBB=.5:'[contraction]

2310 VCC=2 :'[expansion]

2320 GOSUB *PARAM.SET

2330 *SIMPLEX.LOOP:

2340 GOSUB *SIMPLEX.EXECUTION

2350 GOSUB *SIMPLEX.TEMPORARY

2360 GOSUB *SIMPLEX.CONVERGENCE

2370 IF SW=1 AND LOOP<LMAX THEN GOTO *SIMPLEX.LOOP

2380 GOSUB *FINAL

2390 RETURN

2400 '

2410 ' *** PARAMETER SET ***

2420 '

2430 *PARAM.SET:

2440 GOSUB *VAR.CONV

2450 FOR J=1 TO M:VX(1,J)=Q(J):NEXT J

2460 FOR I=2 TO M+1

2470 FOR J=1 TO M

2480 VX(I,J)=(RND(1)*.1+1)*VX(1,J)

2490 NEXT J

2500 NEXT I

2510 '

2520 FOR I=1 TO M+1

2530 FOR J=1 TO M

2540 Q(J)=VX(I,J)

2550 NEXT J

2560 GOSUB *REV.CONV

2570 GOSUB *RESIDUAL

2580 SS(I)=SS

2590 NEXT I

2600 RETURN

2610 '

2620 ' *** EXECUTION of FITTING ***

2630 '

2640 *SIMPLEX.EXECUTION:

2650 IH=1:IL=1

2660 FOR I=2 TO M+1

2670 IF SS(I)>SS(IH) THEN IH=I

2680 IF SS(I)<SS(IL) THEN IL=I

2690 NEXT I

2700 SH=SS(IH):SL=SS(IL)

2710 FOR J=1 TO M

2720 VSUM=0

2730 FOR I=1 TO M+1

2740 IF I=IH THEN 2760

2750 VSUM=VSUM+VX(I,J)

2760 NEXT I

2770 VG=VSUM/M

2780 VR(J)=(1+VAA)*VG-VAA*VX(IH,J)

2790 VC(J)=VBB*VX(IH,J)+(1-VBB)*VG

2800 VE(J)=VCC*VR(J)+(1-VCC)*VG

2810 NEXT J

2820 FOR J=1 TO M:Q(J)=VR(J):NEXT J

2830 GOSUB *REV.CONV

2840 GOSUB *RESIDUAL:SR=SS

2850 IF SR<SL THEN GOSUB *CASE1 ELSE IF SR<SH THEN GOSUB *CASE2 ELSE GOSUB *CASE3

2860 RETURN

2870 '

2880 *CASE1:

2890 FOR J=1 TO M:Q(J)=VE(J):NEXT J

2900 GOSUB *REV.CONV

2910 GOSUB *RESIDUAL:SE=SS

2920 IF SE<SR THEN GOSUB *REPLACE:GOTO 2950

2930 FOR J=1 TO M:VX(IH,J)=VR(J):NEXT J

2940 SS(IH)=SR

2950 RETURN

2960 '

2970 *CASE2:

2980 GOSUB *REPLACE

2990 RETURN

3000 '

3010 *CASE3:

3020 FOR J=1 TO M:Q(J)=VC(J):NEXT J

3030 GOSUB *REV.CONV

3040 GOSUB *RESIDUAL:SC=SS

3050 IF SC<SH THEN GOSUB *REPLACE:GOTO 3170

3060 FOR I=1 TO M+1

3070 FOR J=1 TO M:Q(J)=VX(IL,J):NEXT J

3080 IF I=IL THEN 3160

3090 FOR J=1 TO M

3100 VX(I,J)=.5*(VX(I,J)+VX(IL,J))

3110 Q(J)=VX(I,J)

3120 NEXT J

3130 GOSUB *REV.CONV

3140 GOSUB *RESIDUAL

3150 SS(I)=SS

3160 NEXT I

3170 RETURN

3180 '

3190 *REPLACE:

3200 FOR J=1 TO M

3210 VX(IH,J)=Q(J)

3220 NEXT J

3230 SS(IH)=SS

3240 RETURN

3250 '

3260 ' *** TEMPORARY OUTPUT ***

3270 '

3280 *SIMPLEX.TEMPORARY:

3290 FOR J=1 TO M:Q(J)=VX(IL,J):NEXT J

3300 SS=SS(IL)

3310 GOSUB *REV.CONV

3320 '

3330 LOOP=LOOP+1

3340 CLS 3

3350 PRINT "LOOP=";LOOP

3360 PRINT

3370 PRINT "PARAMETERS: "

3380 FOR J=1 TO M

3390 PRINT "P(";J;")=";P(J)

3400 NEXT J

3410 PRINT

3420 PRINT "RESIDUALS=";SS

3430 RETURN

3440 '

3450 ' *** CHECK of CONVERGENCE ***

3460 '

3470 *SIMPLEX.CONVERGENCE:

3480 EPS=.0001

3490 SW=0

3500 FOR J=1 TO M

3510 VMAX=VX(1,J):VMIN=VMAX

3520 FOR I=2 TO M+1

3530 IF VX(I,J)>VMAX THEN VMAX=VX(I,J)

3540 IF VX(I,J)<VMIN THEN VMIN=VX(I,J)

3550 NEXT I

3560 IF ABS((VMAX-VMIN)/VMIN)>EPS THEN SW=1

3570 NEXT J

3580 RETURN

3590 '

3600 ' *** 変数変換 ***

3610 '

3620 *VAR.CONV:

3630 FOR IS=1 TO M

3640 CN=CN(IS):PM=P(IS):PL=PL(IS):PU=PU(IS)

3650 IF CN=0 THEN Q(IS)=PM

3660 IF CN=1 THEN Q(IS)=SQR(PM)

3670 IF CN=2 THEN Q(IS)=LOG(PM)

3680 IF CN=3 THEN TM=SQR((PM-PL)/(PU-PL)):Q(IS)=ATN(TM/SQR(1-TM*TM))

3690 IF CN=4 THEN Q(IS)=LOG((PM-PL)/(PU-PM))/2

3700 NEXT IS

3710 RETURN

3720 '

3730 ' *** 変数逆変換 ***

3740 '

3750 *REV.CONV:

3760 FOR IS=1 TO M

3770 CN=CN(IS):QM=Q(IS):PL=PL(IS):PU=PU(IS)

3780 IF CN=0 THEN P(IS)=QM

3790 IF CN=1 THEN P(IS)=QM*QM

3800 IF CN=2 THEN P(IS)=EXP(QM)

3810 IF CN=3 THEN P(IS)=PL+(PU-PL)*SIN(QM)*SIN(QM)

3820 IF CN=4 THEN P(IS)=PL+(PU-PL)*EXP(QM)/(EXP(QM)+EXP(-QM))

3830 NEXT IS

3840 RETURN

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