投稿

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を読んで遊んで下さい  

N88-BASICでRayTracingのしくみ

イメージ
2022/5/12(木) N88-BASICでRayTracingのしくみ   通常レイトレーシングは3次元空間に視線を飛ばし、 見えたものを2次元スクリーンに描画しますが、 2次元平面に視線を飛ばし、見えたものを1次元 スクリーンに描画する事で、レイトレーシングの しくみを視覚化しました   今回は、プログラムを単純化する為、光源などは無しに していますが、光源、反射、透過ありの、3次元 レイトレーシングについては、 ブログの https://ulprojectmail.blogspot.com/2021/06/n88-basic-1.html N88-BASICでレイトレーシング (1回目) ~(8回目) を読んで下さい   ます、視点から円までの距離を求めます ここで、数値(スカラー)を小文字、ベクトル (x,y成分を持つ矢印)を大文字で描くこと にします   P:任意の位置ベクトル r:円の半径 V:視点の位置ベクトル E:視線の方向単位ベクトル t:任意の値   とします位置ベクトルPは点Pと同じような ものだと思って下さいEは方向を表し、単位 ベクトルは距離(矢印の長さ)が1のベクトルで、 |E| = 1と書きます|E|はEベクトルの長さです   原点が中心で半径rの円は、 |P| = r で表されます 原点から点Pまでの長さがrの点の集まりです ので、円になります   視点VからE方向に向けた視線は、 P = V + Et で表されます   任意の場所にある円は、中心の位置を点Cとすると、 |P - C| = rとなりますが、視線の方は視点が 移動してもP = V + Etと変わりませんので、 球と視線を移動して円を原点に持ってくれば、 |P| = rの式で求めることができます よって、|P - C| = rは必要ありません   |P| = r P = V + Et   この式から視点と円間の距離tを求めます |P| = r にP = V + Etを代入します |V + Et| = r    | |を外すため両辺を2乗 (V + Et)(V + Et) = r 2  を展開 V・V + 2(V・E)t + (E・E)t 2  = r 2 ここでベクトル同士の積は内積になります E・E = |E||E| = 1×1 = 1 同じベクトルの内積はベクトルの

N88-BASICで円周率

イメージ
2022/4/26(火) N88-BASICで円周率   点P(x,y) (x,y=0~1) のランダムな点の内、 原点O(0,0)からの距離が1以下 の割合の4倍の値を計算します。   点Pは、辺1で面積1の正方形内に存在し、 原点からの距離が1以下の点は、半径1 の円の1/4(面積π/4)内に存在するので、 その割合π/4の4倍はπとなります。   つまり、点が円内に入る確率でπを求めます。   RND(1)が0~1未満の乱数なので、 上記の「以下」を「未満」にしてプログラム しました。   NL-BASICとblg~.zip(pi001.bas)は 以下のリンクからダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

N88-BASICで漢字コード

イメージ
2022/4/23(土) N88-BASICで漢字コード   今では余り見なくなりましたJISコードと シフトJISコードの変換です   16進数4桁のコードを入力すると JIS, SJIS, 全角文字の順で表示します   N88-BASIC(86)には漢字コードを変換するための 命令が用意されています   NL-BASICとblg~.zip(knj001.bas)は 以下のリンクからダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい