α-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
===================================