投稿

6月, 2022の投稿を表示しています

N88-BASICで角度の和

イメージ
2022/6/29(水) N88-BASICで角度の和   角度の和の問題を色々な方法で解いてみる   正方形3個を並べた図中の角度のα+βは何度か       解法1(図で解く)   図のように直角二等辺三角形を書く 直角二等辺三角形の底辺の両角は同じなので45°ずつ と分かるので、α+β = 45°となる   解法2(三角関数で解く)   tanα = 1/3、tanβ = 1/2 tan(α+β) = (tanα + tanβ) / (1-tanαtanβ) = (1/3 + 1/2) / {1 - (1/3)(1/2)} = (1/3 + 1/2) / (1 - 1/6) = (2+3) / (6-1) tan(α+β) = 1 よって、α+β = Tan -1 (1) = 45°   tanの加法定理は https://ulprojectmail.blogspot.com/2021/09/1.html 三角関数 (1回目) を参照して下さい     解法3(複素平面で解く)   複素平面上の原点と点(x+yi)を結ぶ線分と 実軸とのなす角はθ=Tan -1 (y/x)となる αを(1+3i)、βを(1+2i)で表すと、 α+βは(1+3i)(1+2i)で表せる (1+3i)(1+2i) = 1 + (2+3)i - 6 = 5+5i よって、α+β = Tan -1 (5/5) = 45°   複素平面上の座標の積は回転を表す 簡単な例、45°+ 45° (1+i)は実軸とのなす角が45° (1+i)(1+i) = 1+2i-1 = 2i Tan -1 (2/0) = 90°(x座標が0なので)   https://ulprojectmail.blogspot.com/2021/10/n88-basicn-1.html N88-BASICでn乗の解 (1回目) ド・モアブルの定理 (cosα + isinα) n  = cos nα + isin nα でも 複素平面上の座標の積が回転を表す事が分かります   解法4(PCで計算する)   α = Tan -1 (1/3) β = Tan -1 (1/2) の和を表示させると 45°になりました   PCで実数を扱う場合、誤差が生じるので 約45°つまり、四捨五入や切り捨てで45° になった可能性を捨てきれ

N88-BASICで日数

イメージ
2022/6/27(月) N88-BASICで日数   入力した日付間の日数を表示します   例、2022/6/26(日)~2022/6/27(月)は 2 日と表示しています (ユリウス日を使用して求めています)   VL,NL,XL-BASICでは DATE$とTIME$の値の変更は システム時刻に影響せず CLEARやRUNで現在のシステム時刻に リセットされますので 現在時刻を書き換えるプログラムに変更しても 問題ありません   計算式など詳しくは https://ulprojectmail.blogspot.com/2021/09/n88-basicjd-1.html N88-BASICでユリウス日(JD) (1回目) を見てください   ユリウス日(JD)とは 紀元前4713(-4712)年1月1日(月)12:00(世界時) = 0日 とする通算日数(時間は小数で表し0.5は12時間) 紀元前4713年1月1日0:00 = -0.5日 紀元前2年 = -1年 紀元前1年 = 0年 西暦  1年 = 1年 とします   VL,NL,XL-BASICとblg~.zip(days001.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい

N88-BASICでn乗の展開 (2回目)

イメージ
2022/6/24(金) N88-BASICでn乗の展開 (2回目)   (a + b + c) n  = (a + b + c)(a + b + c)… 右辺のn個の(a + b + c)から aをp個、bをq個、cをr個選んだ項は a p b q c r  (p + q + r = n)となり n個のaからp個のaを選び 残りn-p個からq個のbを選ぶ組合せ になっているので a p b q c r  の係数は n C p n-p C q  となり   nCp = nPp/p! = n!/{(n-p)!p!}と p + q + r = n ⇒ n - p - q = r より n C p n-p C q  = [n!/{(n-p)!p!}][(n-p)!/{(n-p-q)!q!}] = n!/(p!q!r!) となり、これは aがp個、bがq個、cがr個の順列(並べ方の数) になります   (a + b + c) n   = ΣΣ{n!/(p!q!r!)}a p b q c r  (r = n - q - r) (q = 0~n-p内)(p = 0~n 外)   プログラムでは a,bの順で降べきになるように (a + b + c) n   = ΣΣ{n!/(p!q!r!)}a p b q c r  (r = n - q - r) (q = n-p~0内)(p = n~0 外) を使用しています (a 3 b 2 はa3b2と表示しています)   関連ブログの紹介   https://ulprojectmail.blogspot.com/2021/07/vl-basic32.html VL-BASICで3乗の展開の図 (2回目)   https://ulprojectmail.blogspot.com/2021/11/n88-basicpc.html N88-BASICで順列組合せ   VL,NL,XL-BASICとblg~.zip(exp002.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

N88-BASICでn乗の展開 (1回目)

イメージ
2022/6/22(水) N88-BASICでn乗の展開 (1回目)   二項定理 (a + b) n  = Σ n C i a n-i b i  (i = 0~n) を使って 2項式のn乗の展開式を表示します (a 3 b 2 はa3b2と表示しています)   関連ブログの紹介   https://ulprojectmail.blogspot.com/2021/07/vl-basic3-1.html VL-BASICで3乗の展開の図 (1回目)   https://ulprojectmail.blogspot.com/2021/11/n88-basicpc.html N88-BASICで順列組合せ   https://ulprojectmail.blogspot.com/2021/11/n88-basicbnp-1.html N88-BASICで二項分布 (1回目) (蛇足で~6回目まであります)   VL,NL,XL-BASICとblg~.zip(exp001.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

VL-BASICでピポッ (3回目)

イメージ
2022/6/20(月) VL-BASICでピポッ (3回目)   PC-9801のピポッを再現(PCM)   2000Hz , 100ms 1000Hz , 100ms の正弦波(Sine wave) でPC-9801の起動音 ピポッ に似た音が鳴ります   今回は、サンプリングレート8000Hz, 16bit, monoの 波形をsin関数で作成して PCM音源としてとして再生しています   VL-BASICは &H80000~&HFFFFF フリーエリア &H80000~    BASIC言語エリア なので、一応 &HA0000~    PCM波形 としています   VL-BASIC、とblg~.zip(pipo003v.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

VL-BASICでピポッ (2回目)

イメージ
2022/6/17(金) VL-BASICでピポッ (2回目)   VL-BASICでPC-9801のピポッを再現(MIDI) PC-9801、PC-8801のN88-BASICや PC-9801のN88-BASIC互換?の NL-BASIC、VL-BASICのMML (Music macro language)で   PLAY "t144l16@20q8v15o6bo5b" または   MPU PLAY "t144l16@1104q8v15o6bo5b" とすると、ピポッとなります (1104 = 128*8+80 = バンク8/音色80)   これを~.mid(SMF:Standard MIDI File) に変換します   VL-BASICを起動し NEW MPU MPU TRON ("pipo") MPU PLAY "t144l16@1104q8v15o6bo5b" MPU TROFF と1行ずつ入力(1行毎にEnterキー)するか pipo002 v.bas(下記リンク)をダウンロードして 実行すると (MPU PLAYの代わりに上記PLAYでも可ですが          0 ,C0,06 … デフォルトの音色 が必ず挿入されます)   pipo.txtが作られます          0 ,F0,41,10,42,12,40,00,7F,00,41,F7          0 ,B0,00,08          0 ,C0,50          0 ,90,5F,7F        104 ,80,5F,7F          0 ,90,53,7F        104 ,80,53,7F Wait(ms:ミリ秒)とMIDI送信データです   pipo.txtをVL-BASIC付属のtron2txt.exe (MIDI→SMFツールでmidフォルダ内に有ります) に重ねると pipo_txt.txtが作られます 4D, 54, 68, 64 ; "Mthd" 00, 00, 00, 06 ; 次の実データ6個で固定 00, 00         ; Format0-2 00, 01         ; トラック数 01, e0         ; 時間

VL-BASICでピポッ (1回目)

イメージ
2022/6/15(水) VL-BASICでピポッ (1回目)   MSGS(Windows標準ソフトウエアMIDI音源)の 正弦波(音色番号080 バンク[008/000] Sine wave)で ピポッを再現しました   MSGSのBank selectについては次のサイトが参考に なりましたので勝手にリンクを貼っておきます MSGSで遊ぼう! (x68uec.org)   このサイトによりますと システムエクスクルーシヴの GS Reset(F0 41 10 42 12 40 00 7F 00 41 F7)hexを 送信しておかないとバンクが切り替わらないそうです (hexは16進数の意味です)   VL-BASICでは A$ = CHR$(&HF0)+CHR$(&H41)+CHR$(&H10)+CHR$(&H42)+CHR$(&H12)+CHR$(&H40) A$ = A$        +CHR$(&H00)+CHR$(&H7F)+CHR$(&H00)+CHR$(&H41)+CHR$(&HF7) MPU MIDI(A$) で送信できます &HF0は16進数のF0と言う意味で CHR$(キャラクターコード&H00~&HFF)で文字に変換して 文字列A$を送信します   バンク切り替えは bank select MSB = 008 (B0 00 08)hex bank select LSB = 000 (B0 20 00)hex です(LSBは常に0の様です)   VL-BASICでは MPU MIDI(&H0800B0) MPU MIDI(&H0020B0)   B0 00 08 は上位と下位バイトを逆にした&H0800B0を指定 します なぜならIntel系CPUでは&H0800B0と言う数値は メモリー内ではB0,00,08の順で格納されるからです   MPU MIDI(CHR$(&HB0)+CHR$(&H00)+CHR$(8)) MPU MIDI(CHR$(&HB0)+CHR$(&H20)+CHR$(0)) (&Hを付けなければ10進数になります) や MPU PLAY

N88-BASICで結晶格子

イメージ
2022/6/12(日) N88-BASICで結晶格子   原子半径をrとし   球を内接する立方体 体心立方格子 面心立方格子 六方最密充填構造   の辺長a、高さh、体積v、充填率pを求める   rとa、hなどの関係式は https://ulprojectmail.blogspot.com/2021/08/vl-basic-1.html VL-BASICで結晶格子 (1回目) ~(3回目) を参照して下さい   半径rの球の体積u = 4πr 3 /3     球を内接する立方体 a = 2r v = a 3  = (2r) 3  = 8r 3   p = 100(u/v) = 100(4πr 3 /3)/(8r 3 ) = (50/3)π     体心立方格子 a = (4/3)(√3)r v = a 3  = {(4/3)(√3)r} 3  = (64/9)(√3)r 3   p = 100(2u/v) = 100{2(4πr 3 /3)}/{(64/9)(√3)r 3 }  = 100π/{(8/3)(√3)} = 300π/(8√3)  = (100√3)π/8 = (25/2)(√3)π     面心立方格子 a = 2(√2)r v = a 3  = {2(√2)r} 3  = 16(√2)r 3   p = 100(4u/v) = 100{4(4πr 3 /3)}/{16(√2)r 3 }  = 100(π/3)/(√2) = (50/3)(√2)π     六方最密充填構造 a = 2r h = (4/3)(√6)r v = (√3)a 2 h/2 = (√3)(2r) 2 {(4/3)(√6)r}/2  = (3√2)2(4/3)r 3  = (8√2)r 3   p = 100(2u/v) = 100{2(4πr 3 /3)}/{8(√2)r 3 }  = 100(π/3)/(√2) = (50/3)(√2)π     VL,NL,XL-BASIC、とblg~.zip(cris001.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

N88-BASICで8色中2色のタイリング

イメージ
2022/6/10(金) N88-BASICで8色中2色のタイリング (重複組合せ)   PC-9801 8色モード2ドットで 1点を表すと何色表現できるか   8色モードのカラーコード(以後、水は水色) 三原色B=1, R=2, G=4の和で表される 例 白 = B+R+G = 1+2+4 = 7 0:黒 1:青 2:赤 3:紫 4:緑 5:水 6:黄 7:白   解法1 8色から2色選ぶ組合せは 8 C 2  = 8・7/2 = 28 これには同じ色同士(00~77)の8組が 含まれていないので 28 + 8 = 36組   解法2 0との組は0~7の8色 1との組は上記0との組を除いた1~7の7色 2との組は上記0~1との組を除いた2~7の6色 3との組は上記0~2との組を除いた3~7の5色 ... 7との組は上記0~6との組を除いた7の1色 よって、8+7+6+5+4+3+2+1 = 8(8+1)/2 = 36組   解法3 8色から重複を許して2色選ぶ組合せは 8色を仕切る仕切り7個 (0|1|2|3|4|5|6|7)と2色をを置く 場所Xを7+2箇所用意する XXXXXXXXX この場所の7箇所に仕切りを置き 残りのXに色を置くと 重複を許して2色選んだ事になる 例1 |X|||X|||と仕切りを置き |X| | |X| | | 0|1|2|3|4|5|6|7 対応する色をXに置くと2色 選んだ事になる 例2 |||XX||||と仕切りを置き | | |XX| | | | 0|1|2|3 |4|5|6|7 対応する色をXに置くと重複して2色 選んだ事になる 仕切を置く組合せ 9 C 7   = 色を置く場所の組合せ 9 C 2  より 9 C 2  = 9・8/2 = 36組   ここで、 03 = 12 (黒紫 = 青赤) [0+(B+R)  =  B  + R  ] 05 = 14 (黒水 = 青緑) [0+(B+G)  =  B  + G  ] 06 = 24 (黒黄 = 赤緑) [0+(R+G)  =  R  + G  ]   07 = 16 (黒白 = 青黄) [0+(B+R+G) =  B  +(R+G)] 07 = 25 (黒白 = 赤水) [0+(B+R+G) =  R  +(B+G)] 07 = 34 (黒白 = 紫緑) [0+(B+R

VL-BASICでコーン

イメージ
2022/6/8(水) VL-BASICでコーン   VL-BASICの拡張命令でコーンを表示します   下記LISTの、*CONEからが、 コーン描画のサブルーチンです   GPU PRIM(CONE, a, b, c) はz座標がcのときx,y座標がa,bの 楕円錐を表示します z座標は正負両方向、つまり原点が頂点の 楕円錐が2個表示されます   GPU MATRIX(MODE, MODEL) は行列をモデルモードにします MODELモードは物体を動かし、 VIEWモードは視点を動かします TEXモードはテクスチャーの貼付け 座標を移動します   GPU MATRIX(MODE, PREVIOUS) は行列のモードを1つ戻します (戻せるのは直前の1回のみです)   GPU MATRIX(PUSH)は行列の保存 GPU MATRIX(POP)は保存した行列を戻す   GPU TRANSLATE(0, 0, HIGH / 2) GPU PRIM(OP, AND) GPU PRIM(PLANE, HIGH / 2) 円錐の高さの半分のz座標から高さの 半分の距離の両平面を、円錐とAND します 円錐を2平面で切るイメージです   GPU PRIM(OP, NAND) GPU PRIM(CONE, INNER, INNER, HIGH) 出来た円錐と、内側の円錐を裏表反転 したものをANDします NANDはNOTしてANDします これで立体的なコーンの完成です   テキスチャーを使用しない場合は TEX座標を移動する必要はありません 移動せずにテクスチャーを貼ると 境界がずれます   GPU MATERIAL(TEX, "Sky") この行でエラーが出るときは Sky.bmpが存在する場所に CHDIRしてから走らせて下さい   因みに画面にドラッグ&ドロップ すると、自動でCHDIRされます   VL-BASIC、とblg~.zip(cone001.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい

N88-BASICでガチャの確率

イメージ
2022/6/2(土) N88-BASICでガチャの確率   当たる確率がpのガチャn回行い 少なくとも1回(1回以上)当たる確率 (1回も当たらない場合以外) を求める   例えば、サイコロ(p=1/6)を6回投げれば 必ず1回は1が出そうですが、現実は そうはいかないようです     n回振って1回も当たらない確率は (1-p) n ですので、 n回振って1が1回以上出る確率は、 1-(1-p) n です   例えば サイコロを6回振って1が1回以上出る確率は、 1-(5/6) 6  = 1 - 15625 / 46656 = 1 - 0.3348... ≒ 1 - 約1/3 ≒ 約2/3程なので、 1回ぐらいは当たりそう、とはいかないようです   [別の解き方] 確率pの試行をn回行いr回当たる確率Pは [二項分布B(n, p)のときX=rとなる確率P] P =  n C r p r (1-p) n-r  なので r = 0回の確率は(1-p) n  なので 1回以上当たる確率は1-(1-p) n  となる 詳しくは https://ulprojectmail.blogspot.com/2021/11/n88-basicbnp-1.html N88-BASICで二項分布(1回目) ~を参照して下さい   プログラムでは乱数でシミュレートした結果と、 理論値()内を表示しています   VL,XL,NL-BASIC、とblg~.zip(gach001.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい