下手な鉄砲の利用法 [BASIC]
下手な鉄砲として、横0.0~1.0,縦0.0~1.0の正方形に、一様に弾があたる場合を想定します。XとYを乱数(0以上1未満)で求めた座標で、原点(0,0)からの距離が1.0未満の場合に、POINTをPLOTします。
1000万回で何回PLOTしたのかをカウントし、その値を1000万で割って4倍した値が円周率の値にどこまで近づくのか試してみました。
3.141までしか計算できていません。
なかなか思ったようにはいかないものですね…^^;
(by 心如)
─────
REM *** モンテカルロ法による円周率の計算 ***
RANDOMIZE
OPTION ANGLE DEGREES
SET WINDOW -0,1,0,1
DRAW GRID (0.1,0.1)
FOR I = 0 TO 90
PLOT LINES : COS(I),SIN(I);
NEXT I
SET POINT STYLE 1
LET C = 0
LET N = 10000000
FOR I = 1 TO N
LET X = RND
LET Y = RND
LET R = SQR(X^2 + Y^2)
IF R >= 1.0 THEN 10
LET C = C + 1
SET POINT COLOR INT(X*50)+INT(Y*50)+2
PLOT POINTS: X,Y
10 NEXT I
PRINT "R < 1.0"
PRINT C;"回 /"; N
LET P = 4 * C / N
PRINT "=";P
END
─────
楕円のグラフ [BASIC]
REM *** 楕円のグラフ ***
RANDOMIZE
OPTION ANGLE DEGREES
SET WINDOW -1,1,-1,1
DRAW GRID (0.1,0.1)
LET A = 1
FOR B = 0.0 TO 1.0 STEP 0.01
LET C = INT(RND*30)+1
SET LINE COLOR C
FOR S = 0 TO 360
PLOT LINES: A*COS(S),B*SIN(S);
NEXT S
PLOT LINES
ASK COLOR MIX(C) R,G,D
PRINT B;C;INT(R*100);INT(G*100);INT(D*100)
NEXT B
極方程式 r=sin(n*θ) による正葉曲線 [BASIC]
別記事〔極方程式 r=sin(n*θ) のグラフ〕で、極座標による方程式により、興味深いグラフが描けることを紹介しました。nの値が、1、2、3、4、5、6、8の場合のサンプル画面を紹介します。
─────
n=1の場合は、半径0.5の円になります。
極方程式 r=sin(n*θ) のグラフ [BASIC]
別記事〔極方程式 r=2cos(S) のグラフ〕で、極方程式のグラフがBASICで簡単に描画できることを紹介しました。
今回は、極方程式 r=sin(n * θ) のグラフで、nにいろんな数値を入力してグラフを描くプログラムを紹介します。
─────
REM *** 極方程式のグラフ ***
REM 極座標で表された点P(r,θ)が満たす
REM r=f(θ)
REM の形の方程式を、極方程式と呼びます
OPTION ANGLE DEGREES
DEF R(S)=SIN(N*S)
SET WINDOW -1,1,-1,1
DRAW GRID (0.2,0.2)
LET C = 1
10 INPUT N
IF N = 0 THEN 99
SET COLOR C
FOR S = 0 TO 360 STEP 0.05
PLOT LINES: R(S)*COS(S),R(S)*SIN(S);
NEXT S
PLOT LINES
LET C = C + 1
GOTO 10
99 END
─────
極方程式 r=2cos(S) のグラフ [BASIC]
繰り返し(for文) [BASIC]
内分法によるアニメーション [BASIC]
REM *** アニメ内分法
SET WINDOW -15,24,-22,22
DIM A(30),B(30),C(30),D(30)
FOR I=1 TO 22
READ A(I),B(I) ! データ読み込み(最初の図)
NEXT I
DATA 10,10,10,20,0,20,0,10,-10,10,-10,0,0,0,0,-10
DATA 0,-20,10,-20,10,-10,10,0,20,0,20,10,10,10
DATA 0,10,0,0,10,0,10,10,10,0,10,-10,0,-10
FOR I=1 TO 22
READ C(I),D(I) ! データ読み込み(最後の図)
NEXT I
DATA 13,1,13,11,6,15,6,5,6,15,1,10,1,0,1,10,6,15,13,11
DATA 8,6,8,-4,8,6,13,11,13,1,6,5,1,0,8,-4,13,1,8,-4
DATA 8,6,1,10
FOR T=0 TO 1 STEP 0.002
CLEAR ! 画面消去
FOR I=1 TO 22 ! 図を描く
PLOT LINES : T*C(I)+(1-T)*A(I),T*D(I)+(1-T)*B(I);
NEXT I
PLOT LINES
PRINT T
NEXT T
FOR T=1 TO 0 STEP -0.002
CLEAR ! 画面消去
FOR I=1 TO 22 ! 図を描く
PLOT LINES : T*C(I)+(1-T)*A(I),T*D(I)+(1-T)*B(I);
NEXT I
PLOT LINES
PRINT T
NEXT T
END
─────