プログラムの依頼

 投稿者:GAI  投稿日:2015年 7月22日(水)20時59分5秒
  数列{a[1],a[2],a[3],・・・}は
a[2n]=a[n];a[2n+1]=(-1)^n
で定められていて、点Pは座標平面上を次のように移動する。
(1)原点をP[0]とし、PはP[0]からx軸の正の方向へ1だけ進む。
この点をP[1]とする。
(2)P[i]まで来たPは,a[i]が1なら左へ90°方向を変えて1だけ進み、-1なら右へ90°方向を変えて1だけ進む。
この点をP[i+1]とする。(ただしi=1,2,3,・・・)


この様に決まっていくP[1],P[2],P[3],・・・の動きを目で追いたい。
手作業でP[100]まではやってみましたが、それ以上を見てみたい。
なお数列{a[n]}
は具体的に{1,1,-1,1,1,-1,-1,1,1,1,-1,-1,1,-1,-1,1,・・・}
が現れるんですが、これってBASICにはコマンドはありませんが代数に特化した計算ソフト
(PARI/GP では kronecker(-1, n) Mathematica では KroneckerSymbol[ -1, n] でこの列が取り出せます。)
自分でプログラムを作っていたんですがどうしても思うような動きが起こりません。
よろしくお願いします。

 

Re: プログラムの依頼

 投稿者:山中和義  投稿日:2015年 7月22日(水)22時34分24秒
  > No.3782[元記事へ]

GAIさんへのお返事です。

> 数列{a[1],a[2],a[3],・・・}は
> a[2n]=a[n];a[2n+1]=(-1)^n
> で定められていて、点Pは座標平面上を次のように移動する。
> (1)原点をP[0]とし、PはP[0]からx軸の正の方向へ1だけ進む。
> この点をP[1]とする。
> (2)P[i]まで来たPは,a[i]が1なら左へ90°方向を変えて1だけ進み、-1なら右へ90°方向を変えて1だけ進む。
> この点をP[i+1]とする。(ただしi=1,2,3,・・・)
>
>
> この様に決まっていくP[1],P[2],P[3],・・・の動きを目で追いたい。


ドラゴン曲線が現れました。



OPTION ARITHMETIC COMPLEX !複素平面

SET WINDOW -10,30,-12,28 !表示領域

LET N=300 !2n+1

DIM A(2*N+1) !数列
LET A(1)=1
FOR K=1 TO N
   LET A(2*K)=A(K)
   LET A(2*K+1)=(-1)^K
NEXT K
MAT PRINT A; !1,1,-1,1,1,-1,-1,1,1,1,-1,-1,1,-1,-1,1,…

LET P=0 !p[0]は原点
PLOT LINES: P;
LET D=0 !平面上での向き 0:右、1:上、2:左、3:下
LET P=1 !p[1]は点(1,0)
PLOT LINES: P;
FOR K=1 TO 2*N+1 !p[k]
   LET D=D+A(K) !左へ90°、右へ90°回転する
   LET P=P+EXP(COMPLEX(0,1)*2*PI*D/4) !各方向へ1だけ移動する
   PLOT LINES: P;
   !!!PRINT P; D !debug
NEXT K

END



 

戻る