|
> No.3536[元記事へ]
作図の処理を簡素化するため、複素平面で考えます。
C曲線
!C曲線と2進法
OPTION ARITHMETIC COMPLEX !複素平面
LET N=7 !n次
SET WINDOW -10,15,-20,5
!!DRAW grid
LET Z=0 !開始位置を原点とする
PLOT LINES: Z;
FOR i=0 TO 2^N-1
LET T=i
LET S=0 !1の個数
DO WHILE T>0
LET S=S+MOD(T,2)
LET T=INT(T/2)
LOOP
PRINT i; S; BSTR$(i,2)
LET Z=Z+EXP(COMPLEX(0,1)*2*PI*S/4) !各方向へ移動する
PLOT LINES: Z;
NEXT i
END
ドラゴン曲線
!ドラゴン曲線と2進法
OPTION ARITHMETIC COMPLEX !複素平面
LET N=8 !n次
SET WINDOW -10,20,-15,15
!!DRAW grid
LET Z=0 !開始位置を原点とする
PLOT LINES: Z;
FOR i=0 TO 2^N-1
LET T=i
LET S=0 !桁数
LET W0=-1 !1つ前の数字
DO WHILE T>0
LET W=MOD(T,2)
IF W<>W0 THEN !ただし、同じ数字が連続する場合、まとめて1桁と数える
LET S=S+1
LET W0=W
END IF
LET T=INT(T/2)
LOOP
PRINT i; S; BSTR$(i,2)
LET Z=Z+EXP(COMPLEX(0,1)*2*PI*S/4) !各方向へ移動する
PLOT LINES: Z;
NEXT i
END
その2
!ドラゴン曲線と2進法
OPTION ARITHMETIC COMPLEX !複素平面
LET N=8 !n次
SET WINDOW -10,20,-15,15
!!DRAW grid
LET Z=0 !開始位置を原点とする
PLOT LINES: Z;
FOR i=0 TO 2^N-1
LET T=i
IF T>0 THEN
DO WHILE MOD(T,2)=0 !2で割り切れる間は割っていく
LET T=T/2
LOOP
IF MOD(T,4)=1 THEN LET S=S+1 ELSE LET S=S-1
ELSE
LET S=0 !桁数 ※0から連続処理する場合
END IF
PRINT i; S; BSTR$(i,2)
LET Z=Z+EXP(COMPLEX(0,1)*2*PI*S/4) !各方向へ移動する
PLOT LINES: Z;
NEXT i
END
その3 k番目の折り目に着目する
!ドラゴン曲線と2進法
OPTION ARITHMETIC COMPLEX !複素平面
LET N=8 !n次
SET WINDOW -10,20,-15,15
!!DRAW grid
LET Z=0 !開始位置を原点とする
PLOT LINES: Z;
LET S=0
FOR K=1 TO 2^N
LET Z=Z+EXP(COMPLEX(0,1)*2*PI*S/4) !各方向へ移動する
PLOT LINES: Z;
LET P=BITAND(K,-K) !k番目の折り目 1:山折り、0:谷折り
LET T=BITAND(P,BITNOT(INT(K/2)))/P !※32bit整数の範囲
IF T=1 THEN LET S=S+1 ELSE LET S=S-1
PRINT K; T; S; BSTR$(K,2)
NEXT K
END
|
|