投稿

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

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|

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

イメージ
 2022/3/25(金) N88-BASICで点と直線の距離 (1回目)   初めに 1. 原点(0,0)と直線ax+by+c=0との距離dを求める     y切片と傾きを書いたグラフの 2つの相似な直角三角形の 辺の比で求めています   直線ax + by + c = 0 [ y = -(a/b)x - c/b ]と 原点O(0, 0)との距離dは 上記図より d = |c| / √(a 2 +b 2 ) となる   次にグラフの平行移動を考える 2. 平行移動   ちなみに、平行移動を使って A(x 1 ,y 1 )を通る傾きmの直線の方程式 y-y 1 =m(x-x 1 ) を求める事ができる   最後に 3. 点P(x 1 ,y 1 )と直線ax+by+c=0との距離dを求める     点P(x 1 ,y 1 )と直線ax+by+c=0を x方向に-x 1 、y方向に-y 1 移動させると 点Pは原点(0,0)に、直線はax+by+(ax 1 +by 1 +c)=0 に移動するが、距離dは変わらないので 原点と直線の距離の公式のcを(ax 1 +by 1 +c)で 置き換えれば良い よって 直線L: ax + by + c = 0 [ y = -(a/b)x - c/b ]と 点P(x 1 , y 1 )との距離d = |ax 1 +by 1 +c|/√(a 2 +b 2 ) となる   また、距離d = |ax 1 +by 1 +c|/√(a 2 +b 2 )は 以下の図で求める事も出来る     点P(x 1 , y 1 )を-x 1 , -y 1  移動して原点に持ってくる ax + by + c = 0も-x 1 , -y 1  移動して a{x-(-x 1 )} + b{y-(-y 1 )} + c = 0 ax + by + ax 1 +by 1 +c = 0 この式と原点の距離がdと同じになる   上図のようにax + by + ax 1 +by 1 +c = 0 を変形して傾きと切片からグラフを書くと 相似な2つの直角三角形が書ける   三平方の定理より r' = √(a 2 /b 2  + 1 2 ) = √{(a 2 +b 2 )/b 2 } = √(a 2 +b 2 )/b   d : 1 = r : r' = (ax

N88-BASICで同じ誕生日の確率

イメージ
2022/3/20(日) N88-BASICで同じ誕生日の確率   n人の誕生日が重複しない確率pを求める   (1年は365日で誕生日にバラツキがないとする) (誕生日が重複する確率は1-p)   1人目からn人目まで並べて 2人目が1人目と違う確率は(365-1)/365 3人目が1~2人目と違う確率は(365-2)/365 n人目が1~n-1人目と違う確率は{365-(n-1)}/365 なので、 n人の誕生日が重複しない確率pは p = (365-1)/365・(365-2)/365・ ... ・{365-(n-1)}/365 となります   別の求め方、   階乗(Factorial)、順列(Permutation)、組合せ(Combination) については https://ulprojectmail.blogspot.com/2021/11/n88-basicpc.html N88-BASICで順列組合せ   を参照して下さい   n人の誕生日が重複しない確率pを求める 別解   365種類の日付からn個を選び並べる方法が 365 P n  通りある つまり、n人が重複しない誕生日の選び方が 365 P n  通りある また、n人の誕生日の選び方は 365 n  通りあるので、   n人の誕生日が重複しない確率pは 365 P n  / 365 n  となる   p = 365 P n  / 365 n    = 365・364・ ... ・(365-n+1) / 365 n    = 364・363・ ... ・{365-(n-1)} / 365 n-1    = (365-1)/365・(365-2)/365・ ... ・{365-(n-1)}/365 と変形すると、前者の求め方と一致する   以上、2通りの考え方の式を導きました   プログラムでは前者の式を使用していますが、 計算精度の関係で確率は近似値になります (すごい誤差が出ているかもしれません)   また、10組分のシミュレートも表示します   同じ誕生日が2人以上の時 誕生日(人数)を表示しています   NL-BASICとblg~.zip(birth001.bas)は 以下のリンクからダウンロードできます https://ulprojectmail.blogspot.com Read

N88-BASICで平均の落とし穴 (2回目)

イメージ
2022/3/18(金) N88-BASICで平均の落とし穴 (2回目)   1回目は平均(mean)が現実を表していない 例を示しました   2回目は中央値(median)が現実を表していない 例です ちなみに   平均は全員の合計年収を、人数で割った値   中央値は小さい順(大きい順でも可)に年収を 並べて真ん中の人が1人の時(全体が奇数人の時)は その人の年収になります 真ん中が2人の時(全体が偶数人の時)は その2人の平均年収になります   NL-BASICとblg~.zip(ave002.bas)は 以下のリンクからダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい

N88-BASICで平均の落とし穴 (1回目)

イメージ
2022/3/16(水) N88-BASICで平均の落とし穴 (1回目)   平均値を聞いた時、現実と違いすぎる と感じたことはありませんか   平均的なもの(average)を表す数値には 平均値(mean)、中央値(median)などがあります   それぞれ、数値によって、現実的な間隔と 近い場合と、遠い場合があります その様な例を表示しました   1回目は 平均年収が1000万円という村(人口10人)があり 高収入な人が多いと思い、村人に話を聞くと 生活が苦しいと言う人が多いと感じました   そんな事があるのでしょうか そんな村の年収を表示しました ちなみに   平均は全員の合計年収を、人数で割った値   中央値は小さい順(大きい順でも可)に年収を 並べて真ん中の人が1人の時(全体が奇数人の時)は その人の年収になります 真ん中が2人の時(全体が偶数人の時)は その 2人の平均年収になります NL-BASICとblg~.zip(ave001.bas)は 以下のリンクからダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい    

N88-BASICでCIRCLE (3回目)

イメージ
2022/3/12(土) N88-BASICでCIRCLE (3回目)   前回の3点を通る円弧 を連続円弧 にします   入力した座標を記録し、 再生するプログラムを セーブ出来る様にしました   このプログラムは一筆書きのみの対応です   NL-BASICとblg~.zip(cir003.bas)は 以下のリンクからダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

N88-BASICでCIRCLE (2回目)

イメージ
2022/3/10(木) N88-BASICでCIRCLE  (2回目)   前回の3点を通る円を円弧にし ます 3点と中心の位置ベクトルをA,B,C,O とすると、 ベクトルA-Oとx軸(正方向)のなす角θ を求めます   A-O=(x,y)とすると、 0°≦θ< 360°は、 -90°≦ Tan -1 (y/x) ≦ 90°として、 x = 0 のとき、   不明  (if y = 0)    90° (if y > 0)   270° (if y < 0) x > 0 のとき、   Tan -1 (y/x)        (if y ≧ 0)   360°+ Tan -1 (y/x) (if y < 0) x < 0 のとき、   180°+ Tan -1 (y/x)   3点A,B,Cのどれを始点、間の点、終点 にするかによって、描かれる円弧が 変わります   BASICでは角度はラジアン(弧度法)なので 0≦θ<2π です   今回は、A,B,Cの順に点を打つとして、 AからCへBを経由する円弧を描きます   A<B<C → A to C B<C<A → A to C C<A<B → A to C A<C<B → C to A B<A<C → C to A C<B<A → C to A   860 IF W > 0 THEN T = ATN(H / W) - (H < 0) * 2 * PI: RETURN この行の(H < 0)は、真なら-1、偽なら0になる   NL-BASICとblg~.zip(cir002.bas)は 以下のリンクからダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

N88-BASICでCIRCLE (1回目)

イメージ
2022/3/8(火) N88-BASICでCIRCLE (1回目)   3点を通る円をCIRCLE命令で描画します   ベクトルは大文字、スカラーは小文字で 書くことにします   ベクトルの内積の行列表記 A=(a x ,a y ), B=(b x ,b y ) A・B = a x b x  + a y b y   |a x  a y ||b x | = a x b x  + a x b y  = A・B              |b y |   行列 M =|a b|の行列式det|M|=ad-bc              |c d| det|M|はベクトル(a b),(c d)または (a c),(b d)が作る平行四辺形の面積(方向有)   行列や、平行四辺形の面積は、このブログの   https://ulprojectmail.blogspot.com/2021/06/n88-basicmatrix-1.html N88-BASICで行列(matrix) (1回目)   https://ulprojectmail.blogspot.com/2022/03/n88-basicvector-2.html N88-BASICでベクトル (2回目)   で、それぞれ解説しています   逆行列 M -1 =   1      | d -b|  (det|M|= ad-bc ≠0)                      ad-bc |-c  a| 単位行列 I=|1 0|          |0 1| (ad-bc)M -1 M=|ad-bc -ab+ab|=|ad-bc   0  |                         |cd-cd -cb+ad|  |  0   ad-bc| M -1 M=|1 0| = I             |0 1|   -------------------------------------------- 円周上の 3点と中心の位置ベクトルを A,B,C,O、円の半径をrとする   A=(a x ,a y ), B=(b x ,b y ), C=(c x ,c y ), O=(x,y), r   中心から各 3点までの距離はrなので |A-O|=r |B-O|=r |C-O|=r   両辺 2乗して |A| 2