投稿

N88-BASICで黄金比

イメージ
2022/4/11(月) N88-BASICで黄金比   黄金比の様に名称が付けられている比は   黄金比 1 : (1+√5)/2 大和比 1 : √2 白金比 1 : √3 などがあります   黄金比の描き方 下図の様に正方形の半分の位置を中心 とする円を描く   黄金比の長方形は 短辺の正方形を除いた長方形も黄金比です 短辺(1 + √5) / 2 - 1 : 長辺1 = √5 - 1 : 2 = 1 : 2/(√5 - 1) = 1 : 2(√5 + 1) / (5-1) = 1 : (1+√5)/2   大和比の長方形は 長辺を半分に折っても大和比の長方形です 短辺√2 / 2 : 長辺1 = 1 : 2 / √2 = 1 : 2√2 / 2 = 1 : √2 コピー用紙はA3を半分にするとA4で 相似なので大和比です   白金比は正三角形の、辺の半分 : 高さです 白金比の長方形は 対角線長が短辺の2倍で、 対角線と辺の間の角は30°と60°で、 どちらも有名角です   長辺:短辺で書き直し、640:整数の概数で表すと 黄金比 640 : 396 大和比 640 : 453 白金比 640 : 370   PC-98などのレトロPCの画面比(16:10)は 640 : 400 で黄金比に近い   アナログ放送やDOS-VのPCの画面比(4:3)は 640 : 480 で大和比に近い   現在のデジタル放送やPCの画面比(16:9)は 640 : 360 で白金比に近い   以上、近い比を探してみました 近いと言うには誤差が大きいように 思えますが、目安やお遊び程度に 考えて下さい   他にも名前の付いた比はある様です 誰かが名前を付ければ、まだまだ 増えるかもしれません   BASICでは今回紹介した比を短辺固定で 左から黄金比、大和比、白金比の順 (PC画面の時代の古い順)で 並べて表示してみました   NL-BASICとblg~.zip(gold001.bas)は 以下のリンクからダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

VL-BASICで音階

イメージ
2022/4/8(金) VL-BASICで音階   MIDIピッチベンド値   (b) = 2進数 (h) = 16進数 hhhhhhhlllllll(b) 0~127,0~127 = 0hhhhhhh(b),0lllllll(b) 10,00(h) = 2048 = 100セント(半音)  1セント = 20.48  2セント = 40.96 ≒ 41 = 29(h) 14セント = 286.72 ≒ 287 = 128*2 + 31 = 2,1F(h)    2セント = 40,00(h) + 29(h) = 40,29(h) -14セント = 40,00(h) - 2,1F(h) (80-1F=61) = 3D,61(h)   セント MIDIピッチベンド送信データ  0  E?, 00, 40(h) … (下位,上位の順)  4  E?, 29, 40(h) … (下位,上位の順) -14  E?, 61, 3D(h) … (下位,上位の順) ? = Channel = 0~F(h)   MIDIピッチベンドは 4000(h)が±0 7F7F(h)が最大高音 0000(h)が最大低音 だそうです   ピッチベンドセンシティビティ Bn,64,00(h) Bn,65,00(h) Bn,06,xx(h) (xxが大きいほどピッチベンド変化大) (nはチャンネルで0~F) xx = 4ならピッチベンド+1000(h)で半音(100セント) xx = 1ならピッチベンド+4000(h)で半音(100セント) を使ってより細かくピッチベンドを指定します (b) = 2進数 (h) = 16進数   ピッチベンド値の計算が面倒なのでプログラムで 計算させています   MIDIピッチベンド値   ピッチベンド値は7bit+7bitで表現されます 0hhhhhhh0lllllll(b)はhhhhhhhlllllll(b)です (例)7F7F(h)は3FFF(h)という値を表している なのでピッチベンドは 0000(h)~4000(h)~7F7F(h)送信値 0000(h)~2000(h)~3FFF(h)実際の値   0  ~8192  ~16383 10進数 -8192 ~  0  ~+8191 変化量 となります   MIDIピッチベンド送信データは4000(h)の場合

N88-BASICで音階

イメージ
2022/4/5(火) N88-BASICで音階   PLAY演奏用のMML(Music macro language)では ト音記号のラをo4aと表記します オクターブ:o1~o8 音階:cdefgab(ド~シ)と シャープ:+または# フラット:-です   o4a = 440Hz (442Hzなど変更可能)として o1c~o8bの振動数(Hz)を表示します   1オクターブに12音階あり 平均律では(他にも色々あるようです) 振動数は2の1/12乗に比例します c~bをx=0~11とし o4cの振動数をo4cとすると 振動数fは f = o4c * 2 ^ (x/12) … (*は掛ける、^は累乗です) で計算できます   o4aを基準とするとc~bをy=-9~2とし f = o4a * 2 ^ (y/12)で計算できます   o2a = o4a * 2 ^ -2 o3a = o4a * 2 ^ -1 o5a = o4a * 2 ^  1 o6a = o4a * 2 ^  2 になります (1オクターブ上がる毎に2倍の振動数です)     純正律と平均律の振動数について   純正律は各音階の振動数が整数比になっているようですが 詳しくは分からないので、ネットで見つけた   https://kozu-osaka.jp/cms/wp-content/uploads/2020/11/5b6cd04faad94f31f51b4652f0a12c76.pdf   に書いてある整数比を使用しました 振動数が整数比になっていると 楽器の音色の倍音成分(基音の2,3,4,…倍の 振動数の音)が干渉しにくく うなりを生じにくいため 綺麗な音に聞こえる様です 和音が一定の音量で鳴ります   平均律はo4aを基準とすると c~bをy=-9~2とし f = o4a * 2 ^ (y/12) で計算できますが 角音階の振動数が整数比になっておらず 楽器の音色の倍音成分が干渉して うなり(音の大小が繰り返えされる) が生じるようです 和音がわんわん…と「うなり」ますが   移調しやすいなど様々な利点があるようです     平均律と純正律の差をセント単位(100セント=半音)で 表示します   x:半音 n:セント とすると   x:1オクターブを12分割(等比分割) a:基準となる振動数(

N88-BASICで原因の確率

イメージ
2022/4/2(土) N88-BASICで原因の確率   (Probability of cause)   aを食べる事象をA bを食べる事象をB aまたはbを食べてあたる事象をC aを食べてあたる確率P A (C) = 1/3 bを食べてあたる確率P B (C) = 1/2 とする   aを3個、bを2個食べて あたった時 aが原因である確率は?   解答 aを食べた割合(確率)P(A) = 3/5 bを食べた割合(確率)P(B) = 2/5   aを食べてかつあたる確率 P(A∩C) = P(A)P A (C) = (3/5)(1/3) = 1/5 … ① bを食べてかつあたる確率 P(B∩C) = P(B)P B (C) = (2/5)(1/2) = 1/5   あたる確率P(C) = P(A∩C) + P(B∩C) = 1/5 + 1/5 = 2/5 … ②   Cがあたった時の原因がAである確率 P C (A) = P(C∩A)/P(C) = P(A∩C)/P(C) = P(A)P A (C)/P(C) = (1/5)/(2/5) … (①,②より) = 1/2   aを食べてあたるをaO、外れるをaX bを食べてあたるをbO、外れるをbXと書く   aO P(A)=3/5 P A (C)=1/3 P(A)P A (C)=1/5 aX aX --------------------- bO P(B)=2/5 P B (C)=1/2 P(B)P B (C)=1/5 bX   P(A)=5個中aが3個 P(B)=5個中bが2個 P A (C)=a(3個)中のあたりaO(1個) P B (C)=b(2個)中のあたりbO(1個) P(A∩C)=P(A)P A (C)=5個中aO(aかつあたり)が1個 P(B∩C)=P(B)P B (C)=5個中bO(bかつあたり)が1個 P C (A)=あたり2個(a0,b0)中a(aO)が1個 という意味となり あたった時aである確率は1/2 aを食べてあたる確率1/3より 多いのはaをbよりたくさん食べたからです   実機では分数(1/2)ではなく小数(0.5)で入力して下さい VL,NL,XL-BASICでは1/2などの式で入力できます   NL-BASICとblg~.zip(caus001.bas)は 以下のリンクから

N88-BASICで干支

イメージ
2022/3/31(木) N88-BASICで干支   干支の十干十二支を表示しました   旧暦の慶応明治も新暦で書いています 1868/10/22まで慶応04 年 、 1868/01/25から明治元年 (旧暦09/07)       (旧暦01/01) 1912/07/29まで明治 15年 、 1912/07/30から大正元年 1926/12/25 まで 大正15年 、 1926/12/26から昭和元年 1 989/ 0 1/ 0 7 まで 昭和64年 、1989/01/08から平成元年 2019/ 0 4/30 まで 平成31年 、 2019/05/01から令和元年 なので、上記年の年号は明治以降の元号の両方を表示 しています 元年は1と表示しています   十干 甲,(きのえ ,乙,(きのと ,丙,(ひのえ ,丁,(ひのと ,戊,(つちのえ 己,(つちのと,庚,(かのえ ,辛,(かのと ,壬,(みずのえ,癸,(みずのと   十二支 子,ねずみ ),丑,うし  ),寅,とら  ),卯,うさぎ ),辰,たつ  ) 巳,へび  ),午,うま  ),未,ひつじ ),申,さる  ),酉,とり  ) 戌,いぬ  ),亥,いのしし)   10(十干)と12(十二支)の最小公倍数60年で1回りするそうです   ちなみに2022(令和4)は壬寅(みずのえとら)です   NL-BASICとblg~.zip(eto001.bas)は 以下のリンクからダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい

N88-BASICで円の接線

イメージ
2022/3/29(火) N88-BASICで円の接線   点P(px,py)を通る、中心C(x 0 ,y 0 )、半径rの円 への接線を描く   円の方程式 円は、中心(x 0 ,y 0 )から任意の点(x,y)へのベクトル の長さがrとなる点(x,y)の集合なので |(x-x 0 ,y-y 0 )| = rより (x-x 0 ) 2  + (y-y 0 ) 2  = r 2   原点が中心なら x 2  + y 2  = r 2     原点Oを中心とした半径rの円周上の点P(p,q)を 通る接線は 原点から点Pへの方向に垂直なので 傾きは-p/qで、点Pを通るので y - q = -(p/q)(x - p) qy - q 2  = -px + p 2   px + qy = p 2  + q 2  (OからPの距離の2乗はr 2 ) px + qy = r 2     点A(x 1 ,y 1 )を通る、原点Oを中心とした半径rの円 の接線は 円周上の点P(p,q)を通るとすると px + qy = r 2   この直線は点Aを通るので px 1  + qy 1  = r 2   また点Pは円周上にあるので p 2  + q 2  = r 2  にq = (r 2  - px 1 )/y 1  を代入 p 2  + (r 2  - px 1 ) 2 /y 1 2  = r 2   y 1 2 p 2  + r 4  - 2x 1 r 2 p + p 2 x 1 2  = y 1 2 r 2   (x 1 2  + y 1 2 )p 2  - 2x 1 r 2 p + r 2 (r 2  - y 1 2 ) = 0 p = x 1 r 2  ±√{x 1 2 r 4  - (x 1 2  + y 1 2 )r 2 (r 2  - y 1 2 )}/(x 1 2  + y 1 2 ) = x 1 r 2  ±r√{x 1 2 r 2  - (x 1 2  + y 1 2 )(r 2  - y 1 2 )}/(x 1 2  + y 1 2 ) = x 1 r 2  ±r√(x 1 2 r 2  - r 2 x 1 2  - r 2 y 1 2  + x 1 2 y 1 2  + y 1 4 )/(x 1 2  + y 1 2 ) = x 1 r 2  ±ry 1 √(

N88-BASICで点と直線の距離 (2回目)

イメージ
2022/3/27(日) N88-BASICで点と直線の距離 (2回目) 円が切取る線分の長さ   原点を中心とする半径r円が 直線ax+by+c=0を切断する長さsを 求めます       図1.   原点以外の中心(x 1 ,y 1 )の円の場合 円と直線を移動して中心を原点に持ってくれば (cをax1+by1+cで置換える)よいので説明を 省きます   直線L: ax + by + c = 0 [ y = -(a/b)x - c/b ]と 原点との距離d = |c| / √(a 2 +b 2 )と半径rから 三平方の定理を使用して s = 2√(r 2 -d 2 ) = 2√{r 2  - c 2 /(a 2 +b 2 )}   原点との距離dを求める式は、このブログの   N88-BASICで点と直線の距離 (1回目) を参照して下さい   別解 ベクトル表記(大文字をベクトルとする) 直線P = V + Et 円 |P| = r |E| = 1とすると (V + Et)・(V + Et) = r 2   |E| 2 t 2  + 2(V・E)t + V・V - r 2  = 0 t 2  + 2(V・E)t + |V| 2  - r 2  = 0 t = -(V・E)±√{(V・E) 2  - |V| 2  + r 2 } t = -(V・E)±√[r 2  - {|V| 2  - (V・E) 2 }] これは視点Vから交点までの距離tを求める式で レイトレーシングで説明した式です   https://ulprojectmail.blogspot.com/2021/06/n88-basic-1.html N88-BASICでレイトレーシング (1回目) ~   ベクトル表記の為2次元でも3次元でも 求めることが出来ます (2次元の円は3次元では球になります)   t = -(V・E)±√[r 2  - {|V| 2  - (V・E) 2 }] が直線と円の交点までの距離なので 円によって切り取られた線分の長さsは ±√[r 2  - {|V| 2  - (V・E) 2 }] の部分なので s = 2√[r 2  - {|V| 2  - (V・E) 2 }] となります ちなみに 図1、三平方の定理(ピタゴラスの定理)、 原点と直線の距離dの公式より |V|