エラトステネスの篩グラフ

 投稿者:たろさ  投稿日:2016年12月13日(火)05時50分52秒
  エラトステネスの篩を基に素数倍波を
座標値
x=x/PI*A(Cr)
y=SIN(x)*A(Cr)
グラフで見える化しました。

LET k=1000
LET k2=168
DIM P(k)
DIM A(k2)
SET WINDOW 460,480,-11,11 !x,y
DRAW grid0(1,1)
SET TEXT FONT "MS ゴシック",15
CALL prime(k)
SET POINT STYLE 7
FOR x=1 TO k/2
   SET TEXT COLOR 2
   PLOT TEXT ,AT x-.4,-.3 :STR$(x)
NEXT x
PRINT A(30);A(31)^2-1
FOR x=0 TO 800 STEP 0.01
   FOR Cr=1 TO 30
      SET POINT COLOR Cr+1
      PLOT POINTS:x/PI*A(Cr),SIN(x)*A(Cr)
   NEXT Cr
NEXT x
FOR x=1 TO k2
   SET TEXT COLOR 4
   PLOT TEXT ,AT A(x)-.4,-.3 :STR$(A(x))
NEXT x

SUB prime(v)  !エラトステネスの奇数列篩
   LET k9=v
   LET h1=1
   LET A(h1)=2
   LET h1=2
   FOR n1=3 TO k9 STEP 2
      IF P(n1)=0 THEN
         LET A(h1)=n1
         LET h1=h1+1
         IF h1>k9+1 THEN GOTO 20
      END IF
      FOR k1=n1 TO k9 STEP 2
         LET m1=n1*k1
         IF m1>k9 THEN GOTO 10
         LET P(m1)=1
      NEXT k1
10    NEXT n1
20
   END SUB
END


CADの様に x軸方向に横スクロール出来たらいいなと思いました。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: エラトステネスの篩グラフ

 投稿者:nagram  投稿日:2016年12月13日(火)11時55分40秒
  > No.4192[元記事へ]

たろささんへのお返事です。

>CADの様に x軸方向に横スクロール出来たらいいなと思いました。

CADは知らないのですが、十進BASICでもグラフィックス画面の画素数を再設定することでスクロールさせることはできますよ。
グラフィックス画面の画素数はデフォルトでは641×641ですが、次のようにして変更することができます。
難点は、水平スクロールバーが描画領域内に設置されるため、その幅のぶん縦方向の描画領域がけずられ垂直スクロールバーも設置されてしまうことです。

LET k=1000
LET k2=168
DIM P(k)
DIM A(k2)
SET BITMAP SIZE 640*5+1,641   ! x軸方向にデフォルトの5倍拡張
SET WINDOW 460-40,480+40,-11,11 !x,y
DRAW grid0(1,1)
SET TEXT FONT "MS ゴシック",15
    (以下略)
 

Re: エラトステネスの篩グラフ

 投稿者:たろさ  投稿日:2016年12月13日(火)18時59分35秒
  > No.4193[元記事へ]

nagramさんへのお返事です。

> たろささんへのお返事です。
>
> >CADの様に x軸方向に横スクロール出来たらいいなと思いました。
>
> CADは知らないのですが、十進BASICでもグラフィックス画面の画素数を再設定することでスクロールさせることはできますよ。
> グラフィックス画面の画素数はデフォルトでは641×641ですが、次のようにして変更することができます。
> 難点は、水平スクロールバーが描画領域内に設置されるため、その幅のぶん縦方向の描画領域がけずられ垂直スクロールバーも設置されてしまうことです。
>
> LET k=1000
> LET k2=168
> DIM P(k)
> DIM A(k2)
> SET BITMAP SIZE 640*5+1,641   ! x軸方向にデフォルトの5倍拡張
> SET WINDOW 460-40,480+40,-11,11 !x,y
> DRAW grid0(1,1)
> SET TEXT FONT "MS ゴシック",15
>     (以下略)

ありがとうございます。

OPTION ARITHMETIC NATIVE       !2進モード
LET k=1010
LET k2=169
DIM P(k)
DIM A(k2)
SET BITMAP SIZE 640*63+1,641   ! x軸方向にデフォルトの5倍拡張
SET WINDOW 0,k,-11,11          !16*x,y
DRAW grid0(1,1)
SET TEXT FONT "MS ゴシック",13
CALL prime(k)
SET POINT STYLE 1
FOR x=1 TO k
   SET TEXT COLOR 2
   PLOT TEXT ,AT x-.4,-.3 :STR$(x)
NEXT x
PRINT A(30);A(31)^2-1
FOR x=0 TO 1600 STEP 0.01
   FOR Cr=1 TO 30
   !RANDOMIZE
   !LET nr=1+INT(4*RND)
      SET POINT COLOR 1+Cr
      PLOT POINTS:x/PI*A(Cr),SIN(x)*A(Cr)
   NEXT Cr
NEXT x
FOR x=1 TO k2
   SET TEXT COLOR 4
   PLOT TEXT ,AT A(x)-.4,-.3 :STR$(A(x))
NEXT x

SUB prime(v)  !エラトステネスの奇数列篩
   LET k9=v
   LET h1=1
   LET A(h1)=2
   LET h1=2
   FOR n1=3 TO k9 STEP 2
      IF P(n1)=0 THEN
         LET A(h1)=n1
         LET h1=h1+1
         IF h1>k9+1 THEN GOTO 20
      END IF
      FOR k1=n1 TO k9 STEP 2
         LET m1=n1*k1
         IF m1>k9 THEN GOTO 10
         LET P(m1)=1
      NEXT k1
10    NEXT n1
20
   END SUB
END




http://blogs.yahoo.co.jp/donald_stinger

 

戻る