投稿

9月, 2021の投稿を表示しています

三角関数 (3回目)

2021/9/29(水) 三角関数 (3回目)   tanh -1 (x)をlogで表す (log = log e  とする) sinh(t) = {exp(t)-exp(-t)}/2 cosh(t) = {exp(t)+exp(-t)}/2 tanh(t) = sinh(t)/cosh(t) x = tanh(t)と置くと x = {exp(t)-exp(-t)}/{exp(t)+exp(-t)} xexp(t)+xexp(-t) = exp(t)-exp(-t) xexp(t)-exp(t) = -exp(-t)-xexp(-t) (x-1)exp(t) = -(x+1)exp(-t) exp 2 (t) = -(x+1)/(x-1) exp(2t) = (1+x)/(1-x) t = log{(1+x)/(1-x)}/2 tanh -1 (x) = log{(1+x)/(1-x)}/2

三角関数 (2回目)

イメージ
2021/9/28(火) 三角関数 (2回目)   余弦定理を導き 極座標形式の楕円の式を導きます (証明ではなく導き方の1つです)   図1. 余弦定理を導く   d 2  = c 2  - a 2 sin 2 θ = c 2  - a 2 (1-cos 2 θ)    = c 2  - a 2  + a 2 cos 2 θ   d 2  = (b - acosθ) 2  = b 2  - 2abcosθ + a 2 cos 2 θ   c 2  - a 2  + a 2 cos 2 θ = b 2  - 2abcosθ + a 2 cos 2 θ c 2  = a 2  + b 2  - 2abcosθ (余弦定理)   cosθ = (a 2  + b 2  - c 2 ) / 2ab   cosθ<0 ならθ>90°   次の図は、図的に理解できないかを考えて 描いたものです。 分かりにくいですが理解の助けにして下さい。     cosとtanの変換 x 2  + y 2  = r 2  ⇒ x 2 /r 2  + y 2 /r 2  = 1より sin 2 θ + cos 2 θ = 1 tanθ = y/x = (y/r)/(x/r) = sinθ/cosθ tan 2 θ = sin 2 θ/cos 2 θ        = (1-cos 2 θ)/cos 2 θ        = 1/cos 2 θ - 1   よってcosθの値から次の式でθを計算できます tan 2 θ = 1/cos 2 θ - 1 t = tanθの逆関数はθ=Tan -1 (t)です     極座標形式の楕円の式を導きます   図1. 中心Oから±c離れた焦点F,F'   長半径a 離心率e = c / a 焦点距離c = ae 短半径  b = √(a 2  - c 2 ) = a√(1 - e 2 )   r = 線分PF、r'= 線分PF'と置くと、 楕円はr + r' = 2aとなる 点Pの集合です。   この関係を余弦定理で表すと、 r' 2  =  (2c) 2  + r 2  - 2(2c)r cos(180゚-θ)   sin(180゚-θ) =  sinθ   cos(180゚-θ) = -cosθ   

三角関数 (1回目)

イメージ
2021/9/27(月) 三角関数 (1回目)   加法定理 sin(α±β) = sinαcosβ±cosαsinβ cos(α±β) = cosαcosβ ∓sinαsinβ tan(α±β) = (tanα±tanβ)/(1 ∓tanαtanβ)   倍角公式 sin2θ = 2sinθcosθ cos2θ = 1 - 2sin 2 θ = 2cos 2 θ - 1 tan2θ = 2tanθ/(1-tan 2 θ)   半角公式 sin 2 (θ/2) = (1 - cosθ) / 2 cos 2 (θ/2) = (1 + cosθ) / 2 tan 2 (θ/2) = (1 - cosθ) / (1 + cosθ)   三角関数は、原点Oが中心で半径rの 円周上の点をP(x,y)、正のx軸と 線分OPとのなす角をθとし、 sinθ = y / r cosθ = x / r tanθ = y / x で定義される (底辺x,高さy,斜辺r, xとrのなす角θの 直角三角形の辺の比を定義している)   x = rcosθ y = rsinθ は半径rの円を示している   BASICでは度数法の360°を2πとする、 弧度法(ラジアン)で計算されます d°とtラジアンの変換は、 d = 180t / π t = πd / 180 です     加法定理の導出     sin(α+β) = sinαcosβ+cosαsinβ cos(α+β) = cosαcosβ-sinαsinβ 図1. 加法定理   sin(-β) = -sinβ cos(-β) =  cosβ sin(α-β) = sinαcosβ-cosαsinβ cos(α-β) = cosαcosβ+sinαsinβ   tan(α±β) = sin(α±β) / cos(α±β) = (sinαcosβ±cosαsinβ) / (cosαcosβ∓sinαsinβ)  [分子分母をcosαcosβで割り   tanθ = sinθ/cosθで置き換える] = (tanα±tanβ)/(1∓tanαtanβ)     倍角公式の導出 sin2θ = 2sinθcosθ cos2θ = cos 2 θ - sin 2 θ = 1 - 2sin 2 θ             = 2cos 2 θ - 1

N88-BASICでユリウス日(JD) (3回目)

イメージ
2021/9/26(日) N88-BASICでユリウス日(JD) (3回目)   ユリウス(Julius)日(JD)を使って n日後の日付を表示します   ユリウス日(JD) 紀元前4713(-4712)年1月1日(月)12:00(世界時) = 0日 とする通算日数(時間は小数で表し0.5は12時間) 紀元前4713年1月1日0:00 = -0.5日   紀元前2年 = -1年 紀元前1年 = 0年    1年 = 1年    2年 = 2年 とします   JD + 0.5は 紀元前4713年1月1日0:00 = 0.0日とした 日数になります   曜日はJD + 0.5 を7で割った余り0~6が 月~日に対応します   何日後の入力値 -1:1日前  1:1日後  0:終了 です   N88-BASICの現在の日付(TIME$)の年は 2桁なので2000を足しています   NL-BASICシリーズのTIME$の2桁の年は システム時刻の日付の年の下2桁になります (システムが1900年代なら99は1999年に システムが2000年代なら99は2099年として 閏年の計算をしています)   NL-BASICとblg~.zip(juli003.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい

N88-BASICでユリウス日(JD) (2回目)

イメージ
2021/9/25(土) N88-BASICでユリウス日(JD) (2回目)   ユリウス(Julius)日(JD)の逆算をします   以後ガウス記号[]を使用します [a]はBASICではINT(a)、Cではfloor(a) で、aを超えない最大の整数です [1.9] = 1、[-1.9] = -2   DD = JD + 0.5として、DDを 紀元前4713(-4712)年1月1日(月)0:00(世界時) からの日数とします(JD 0日ならDD=0.5日)   J = [d]    日数 d = d - J  時間 日数部分で計算し、結果の日付に時間部分を足します   J >= 2299160.5 + 0.5 なら次の グレゴリオ暦からユリウス暦への変換処理が入ります   前回説明した1582/10/4までの暦による日数差を補正 しグレゴリオ暦の日数へ変換、J = J - (12 - 10) 0/3/1 = JD1721117.5からの日数を年に変換 Y = {J - (1721117.5 + 0.5) + 1} / 365.2425 この年を使って、ユリウス暦の日数に変換 J = J + [Y / 100] - [Y / 400] この後はユリウス暦と同じ処理へ   ユリウス暦 紀元前4713(-4712)年1月1日0:00(世界時) から 紀元前4713(-4712)年2月29日0:00(世界時) までが59日で、この日から 紀元前4713(-4708)年2月29日0:00(世界時) までが365x3+366 = 365.25x4となるので   J = J - 31 - 28として y = [(J - α) / 365.25]で年を取出します   J = J - [365.25y] + 122   で、その年の日数部分J - [365.25y]として 3月1日を1日目とした日数にし、 前回使用した数列a n =[30.601n]が月の日数に 合うようにシフトするため122を足し、 m = [J / 30.601]で月を取出します (m = 4~15 = 3月-14月に対応)   ただし、閏年の2/29日は365.25で割り切れて 次の年で、日数が0になるため α = 0.001 (他に影響しない微小値s)を引いて 無理やりその年で、日数が366になるよ

N88-BASICでユリウス日(JD) (1回目)

イメージ
2021/9/24(金) N88-BASICでユリウス日(JD) (1回目)   ユリウス(Julius)日(JD)を求めます   以後ガウス記号[]を使用します [a]はBASICではINT(a)、Cではfloor(a) で、aを超えない最大の整数です [1.9] = 1、[-1.9] = -2   ユリウス日(JD) 紀元前4713(-4712)年1月1日(月)12:00(世界時) = 0日 とする通算日数(時間は小数で表し0.5は12時間) 紀元前4713年1月1日0:00 = -0.5日   紀元前2年 = -1年 紀元前1年 = 0年    1年 = 1年    2年 = 2年 とします   天文学では夜中に観測するので観測途中に日付が 変わらないように0:00ではなく12:00に日付が 変わるようにしていたが、現在廃止されている のに、ユリウス日はそのまま使っているようです ユリウス日も0:00起点に修正してほしかったです   ユリウス暦 紀元前45年1月1日 - 1582年10月4日(木) 1年(約365.24219日)を365.25日(365 + 1/4)で近似 4で割切れる年を閏年とする 4年毎に閏年が来る 1582年10月4日(木)の次の日は1582年10月15日(金)   グレゴリオ暦 1582年10月15日(金) - 現在 1年(約365.24219日)を365.2425日 (365 + 0.25 - 0.01 + 0.0025) (365 + 1/4 - 1/100 + 1/400)で近似 400で割切れる年を閏年または、 4で割切れて100で割切れない年を閏年とする 4年毎に閏年が来、100年毎に閏年が来なくて 400年毎に閏年が来る   ユリウス日 ,  年,月,日 JD   -0.5, -4712, 1, 1 JD    0 , -4712, 1, 1.5 JD元期 JD 1721117.5,   0, 3, 1 JD 1721423.5,   1, 1, 1 JD 2299159.5, 1582,10, 4  ユリウス暦 (最終日) JD 2299160.5, 1582,10,15  グレゴリオ暦(開始日) JD 2400000.5, 1858,11,17  修正ユリウス日元期 JD 2451544.5, 2000, 1, 1 JD

N88-BASIC(256色)でレイトレーシング

イメージ
2021/9/10(金) N88-BASIC(256色)でレイトレーシング for VL-BASIC,NL-BASIC,N88-BASIC(PC-9821) by ULproject   N88-BASICでレイトレーシング (1~8回目) をN88-BASIC(256色)で描画するようにしました 1677万7216色から選ぶと256色で足りなくなるので 4096色中256色を選んで描画しています PC-9821(またはVL-BASIC)の 1677万7216色中256色 モードで描画しています   パレット番号0~255の内 0~7を8色モードと同じ色に設定 (VL-BASICは0~15が16色モードの色に設定されて いて使うかもしれないので変更していません) 16:黒 17~255:初めて出てきた色を順次設定 という様に使用しています  プログラム中のN88の値によって N88 = 0でVL-BASIC用(ray201v.bas) N88 = 1でNL-BASIC用(ray201n.bas) N88 = 2でPC-9821用(ray201.bas) の動作をします (NL-BASICが遅いのでN88 = 1では 画面クリアを省略しています)   VL-BASIC,NL-BASICとblg~.zip (ray201v.bas, ray201n.bas, ray201.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

N88-BASICでピタゴラス

イメージ
2021/9/8(水) N88-BASICでピタゴラス   三平方の定理(ピタゴラスの定理)を 視覚化してみました   図1 三平方の定理の視覚化   水色の下の直角三角形に注目すると 底辺a、高さb、斜辺cとして、 a 2  + b 2  は白+水色+黄+橙の面積 c 2  は白+緑色の面積 で、橙+水色 = 緑なので、 三平方の定理c 2  = a 2  + b 2   が成り立ちます。   水色の三角形を緑の場所へ連続的 に動かして見ましょう。   点(x , y ) = ( rcosα     ,  rsinα     ) を、原点周りにθ回転した点(x', y')は 点(x', y') = ( rcos(α+θ),  rsin(α+θ)) より、 |x'|= |rcos(α+θ)| |y'|   |rsin(α+θ)| = |rcosαcosθ - rsinαsinθ|    |rsinαcosθ + rcosαsinθ| = |xcosθ - ysinθ|    |xsinθ + ycosθ| = |cosθ  -sinθ||x|    |sinθ   cosθ||y|   この回転行列を使用して、三角形の 各点を回転させて見ました。   NL-BASICとblg~.zip(sqr001.bas)はブログTOPの ダウンロードリンクからダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい