■この門くぐるべからず(その10)
n次元立方体は,
頂点数: 2^n,
稜数: 2^(n-1)n,
四角形数:2^(n-3)n(n−1)
からなっている.このうち,頂点は(±1,±1,・・・,±1)であるから,確かに2^n個あることがわかる.
すべての頂点を重複なく,遺漏なく数え上げるために,2進数を用いるとよい.以下に,それを効率よく行うプログラムを掲げる.
===================================
4640 '
4650 ' *** 超直方体 ***
4660 '
4670 *HYPERCUBE:
4680 T=1:' [non-stochastic]
4690 FOR IS=1 TO M:EDGE(IS)=SQR(T*AZ(IS,IS)):NEXT IS
4700 '
4710 FOR IS=0 TO 2^M-1
4720 FOR JS=1 TO M:S(JS)=-1:NEXT JS
4730 FOR JS=1 TO M
4740 IF (IS AND 2^(JS-1))=0 THEN S(JS)=1
4750 NEXT JS
4760 GOSUB *VERTEX:GXS=GX:GYS=GY
4770 '
4780 FOR JS=1 TO M:S0(JS)=S(JS):NEXT JS
4790 FOR JS=1 TO M
4800 FOR KS=1 TO M:S(KS)=S0(KS):NEXT KS
4810 S(JS)=-S(JS)
4820 GOSUB *VERTEX:GXE=GX:GYE=GY
4830 LINE(GXS,-GYS)-(GXE,-GYE),7
4850 NEXT JS
4860 NEXT IS
4870 RETURN
4880 '
4890 ' *** 頂点 ***
4900 '
4910 *VERTEX:
4920 GX=0:GY=0
4930 FOR LS=1 TO M
4940 GX=GX+BZ(I,LS)*EDGE(LS)*S(LS)
4950 GY=GY+BZ(J,LS)*EDGE(LS)*S(LS)
4960 NEXT LS
4970 GX=GX+VO(I):GY=GY+VO(J)
4980 RETURN
===================================