2017年8月30日水曜日

C# 数学1 「三角関数-基本1、逆三角関数、三角比」(ラジアン sin cos tan asin acos atan atan2)

C# 統計・微分積分・線形代数への道
目次→http://1studying.blogspot.jp/2017/08/senkei-index.html#kuw01

「三角関数」について
プログラムで実用する部分を最初にまとめます。
細かい説明はその後に記載してあります。

ここでは、
「×」を「*」
「÷」や「分数」を「/」
で表現します。

説明にあたって以下の呼び方をする事があります
  sinA=sinθ=正弦=対辺の比率←このサイトでは「対辺率」とも呼びます
  cosA=cosθ=余弦=底辺の比率←このサイトでは「底辺率」とも呼びます
  tanA=tanθ=正接=斜辺の傾き←このサイトでは「傾き」とも呼びます




まとめ「三角関数」


先にC#での記述を記載しておきます。
式などの解説は次項目から書いていきます。
  

三角関数系、基本12パターン(要「直角三角形」)
r = x / cosθ」(「r」を「x」と「θ」から求める)
r = y / sinθ」(「r」を「y」と「θ」から求める)
r = √(x2 + y2)」(「r」を「x」と「y」から求める)
x = cosθ * r」(「x」を「θ」と「r」から求める)
x = y / tanθ」(「x」を「y」と「θ」から求める)
x = √(r2 - y2)」(「x」を「r」と「y」から求める)
y = sinθ * r」(「y」を「θ」と「r」から求める)
y = tanθ * x」(「y」を「θ」と「x」から求める)
y = √(r2 - x2)」(「y」を「r」と「x」から求める)
θ = asin(y / r)」(「θ」を「y」と「r」から求める)
θ = acos(x / r)」(「θ」を「x」と「r」から求める)
θ = atan(y / x)」(「θ」を「y」と「x」から求める)
プログラム上では「角度θ」の指定や戻り値は必ず「ラジアン表記上の値」
で行う事に注意して下さい。
「角度θ」をプログラム上で求める場合は「atan2」を使った方が良いです。
詳しくは後述する
  『凄く便利。「atan2」について』
を参照してください。
double angle = 30.0; //「30度」を指定
var angleRAdian = angle / 180  * Math.PI; //度からラジアン角度を求める
double r = 50.0;
double x = 25 * Math.Sqrt(3); //(25√3)
double y = 25.0;
// -----------------------------
double r1 = x / Math.Cos(angleRAdian); //rをxとラジアンから求める
double r2 = y / Math.Sin(angleRAdian); //rをyとラジアンから求める
double r3 = Math.Sqrt(Math.Pow(2, x) + Math.Pow(2, y)); //rをyとラジアンから求める
double x1 = Math.Cos(angleRAdian) * r; //xをラジアンとrから求める
double x2 = y / Math.Tan(angleRAdian); //xをyとラジアンから求める
double x3 = Math.Sqrt(Math.Pow(2, r) - Math.Pow(2, y)); //xをラジアンとrから求める
double y1 = Math.Sin(angleRAdian) * r; //yをラジアンとrから求める
double y2 = Math.Tan(angleRAdian) * x; //yをラジアンとxから求める
double y3 = Math.Sqrt(Math.Pow(2, r) - Math.Pow(2, x)); //yをrとxから求める
double theta1 = Math.Asin(y / r); //ラジアンをyとrから求める
double theta2 = Math.Acos(x / r); //ラジアンをxとrから求める
double theta3 = Math.Atan(y / x); //ラジアンをyとxから求める
//ラジアンを求める場合は、「atan2」を使った方が良い。
割り算を使う式を使用する場合、0で割らないように気をつける。


三角関数系、+1パターン。座標から角度を求める(要「直角三角形」)
atan2(y座標とx座標)」(「角度θ」を「y」と「x」から求める。-値含む全座標対応)
        double x =  25 * Math.Sqrt(3); //(25√3)
        double y = 25.0;
        // -----------------------------
        double theta = Math.Atan2(y, x); //ラジアンをyとxから求める(-値含む全座標対応)
「atan2」は引数が「y」「x」の順となります。気をつけて使用して下さい。



「度数法」と「ラジアン」(角度単位)


「度数法」(ディグリー)
度数法とは普段使う角度の事。「90°」とか「360°」などと表記します。
単位は「度」。


「ラジアン」(弧度法)
ラジアンは「π」をうまく使い、人や機械に度数計算を行いやすくさせる表記方法です。
単位は「rad」。「ラジアン」と読みます。
普段は単位の「[rad]」は省略して書きますが、あえてここでは記述して進めます。
  「360°」が「2π[rad]」
  「180°」が「π[rad]」
とラジアンでは表記されます。
「ラジアン」とは「π」を使用した表記方法です。
このサイトでは「○πラジアン」と呼称する事もあります。

以下のように記述します。
  

「π」を「3.14159265…」として計算すると以下の形となります。
  2π[rad] = 6.283185307[rad]  ←360°のラジアン
  π/2[rad] = 1.570796327[rad]  ←90°のラジアン


「度数法」←→「ラジアン」
「度数法」と「ラジアン」を相互に変換してみます。
  「ラジアン[rad] = (度° / 180) * π」(「度」から「○πラジアン」を求める)
  「度° = (ラジアン[rad] / π) * 180」(「○πラジアン」から「度」を求める)
となります。
・「360°→ラジアン」へ変換する(「度」を180で割ってπを掛ける)
  (360°/180) *π = 2π[rad]
・「2π[rad]→度数表記」へ変換する(「○πラジアン」からπを取り除いて180掛ける)
  (2π[rad]/π) * 180 = 360°
・各「度数」を「ラジアン」へ変換する(「度」を180で割ってπを掛ける)
  
・各「ラジアン」を「度数」へ変換する(「○πラジアン」からπを取り除いて180掛ける)
  
・相互変換は以下のイメージで覚えると楽です。それぞれ「□」内へ値を入れる。
  


ラジアンの詳細
ラジアンはそもそも以下の考え方に基づいたものです。
  
  ここでは特別に「円周距離1」の角度を計算で求めましたが、
  通常、ラジアンはほとんどの場合「○*π[rad]」の形で扱う事となります。


「C#」や「計算機」で計算させる際の注意
プログラムの際は「度」よりも「ラジアン」の表記を使うのが一般的です。
「C#」の「Math」でも、
「sin、cos、tan」等の引数に「ラジアン」を受け取ります。

「sin、cos、tan」等を「関数電卓」などで計算する際、
「計算機」の「角度モード」に注意しましょう。
角度を表す単位は「ディグリー」「ラジアン」「グラード」があり、
「計算機」の表示が「DEG」「RAD」「GRA」でそれぞれ違います。
普段の「度数法」の角度を使用するのが「DEG」モードです。
「πラジアン」を使うのが「RAD」モードとなります。



「三角関数」の元だね


「三角関数」(要「直角三角形」)
斜辺が「r」、横が「x」、縦が「y」とした場合、
「s」「c」「t」の筆記体の筆順で「三角関数の公式」をイメージ出来ます。
  
  例えば左側の筆記体の「s」の書き順にならって
  「r分のy」の答えが「sinθ」となっている事が分かるでしょうか?
ここで使う「シータθ」とは「角度」の事です。
「角度」の表記数値は
「計算機」の表示モードが「度数法」か「ラジアン」かで変わるので注意しましょう。

「直角三角形」で「sinθ」の関係をイメージすると以下の形となります。
  
ここから試しに「y」を目隠して「y」を求めてみます。(角度は「ラジアン」表記)
  
  結果、「y=√3」となりました。


「sinθ、cosθ、tanθ」を「sinA、cosA、tanA」と書ける
「三角関数」の計算では頻繁に以下の文字が使われますが、
  「sinθ」「cosθ」「tanθ」
まったく同じ意味の文字として以下の様な書き方も出来ます。
  「sinA」「cosA」「tanA」
「θをA」に変えた表記は一番よく使用されます。
たぶん「Answer(答え)」の略だと思います。
別に「θ」や「A」以外の文字でも構わないので
  「sinB、cosB、cosB」や「sinα、cosα、tanα」
のように書く事も可能です。
  
「sinθやsinA」「cosθやcosA」「tanθやtanA」の事を、
  「三角関数」とか「三角比」とか「比率、傾き」などと呼びます。
「三角比」や「比率、傾き」については後述します。


「1/sinθ、1/cosθ、1/tanθ」を「cscθ、secθ、cotθ」と省略可
他にも「三角関数」の計算で、
  「1/sinθ」「1/cosθ」「1/tanθ」
が使われる事があります。これらの省略系の書き方
  「cscθ」「secθ」「cotθ」
が存在します。
  
但し、実際は「cscθ secθ cotθ」で書くより、
「1/sinθ 1/cosθ 1/tanθ」で記述する人の方が多いです。


三角関数系、基本(6/12)パターン(要「直角三角形」)
「三角関数の公式」から「r、x、y」を求める形に式の変形をすると、
 「y = sinθ * r」(縦「y」を「角度θ」と斜辺「r」から求める)
 「x = cosθ * r」(横「x」を「角度θ」と斜辺「r」から求める)
 「y = tanθ * x」(縦「y」を「角度θ」と横「x」から求める)
 「r = cscθ * y」「r = y / sinθ」(斜辺「r」を「角度θ」と縦「y」から求める)
 「r = secθ * x」「r = x / cosθ」(斜辺「r」を「角度θ」と横「x」から求める)
 「x = cotθ * y」「x = y / tanθ」(斜辺「r」を「角度θ」と縦「y」から求める)
のようになります。

後述の「(三平方)ピタゴラスの定理」を使えば
 「r = √( x2 + y2)」(斜辺「r」を横「x」と縦「y」から求める)
「角度θ」が分からない状態からでも「r」を求める事ができます。


計算例:(「三角関数」角度をラジアンで計算)
「θ = 30°」「r = 50」の場合の「x」と「y」を求める。
  
まず、「θ=30°」を「○πラジアン」の形に変換します。
  
変換した「θ=(1/6)π[rad]」を使い「x」と「y」を求めます。
  
結果、「x=25√3」「y=25」となり、以下の形となります。

  

参考(度)→http://keisan.casio.jp/exec/system/1260261251
参考(ラジアン)→http://keisan.casio.jp/exec/system/1260280032



「逆三角関数」の元だね


「逆三角関数」角度θを求める(要「直角三角形」)

斜辺が「r」、横が「x」、縦が「y」とした場合、
「s」「c」「t」の筆記体の筆順で「逆三角関数の公式」をイメージ出来ます。
  
  それぞれ、
  「asin」アークサイン「acos」アークコサイン「atan」アークタンジェント
  を使用して「角度θ」を求めています。
  例えば左側の筆記体の「s」の書き順にならって
  「r分のy」と「asin()」の括弧内がなっている事が分かるでしょうか?
「角度」の表記数値は
「計算機」の表示モードが「度数法」か「ラジアン」かで変わるので注意しましょう。

「直角三角形」で「asin(y/r) =θ」の関係をイメージすると以下の形となります。
  
ここから試しに「θ」を目隠して「θ」を求めてみます。(角度は「○πラジアン」表記)
  
  結果、「θ=(1/3)π[rad]」となりました。


「asin、acos、atan」を「sin-1、cos-1、tan-1」と書ける
「逆三角関数」の計算では頻繁に
  「asin」「acos」「atan」
  (「アークサイン」「アークコサイン」「アークタンジェント」と読み、
  「arcsin」「arccos」「arctan」と書く事もあります)
が使われますが、以下の様な書き方
  「sin-1」「cos-1」「tan-1
もよく使用されます。
  
  「sin-1、cos-1、tan-1」と書いた時は「-1」を「インバース」と読みます。
「計算機」や「関数電卓」ではこの「インバース」を使った表記が多いです。

他にも「逆三角関数」には、
  「acsc」アークコセカンド
  「asec」アークセカンド
  「acot」アークコタンジェント
が存在しますがこれらはあまり使用しません。ここでは覚えなくて大丈夫です。
(各々「acscは→asin」「asecは→acos」「acotは→atan」で代用されます。
答え「θ」を求めるために必要な「r、x、y」の素材が同じなので代用可能です。
下記「三角関係、基本(3/12)パターン」では斜線を引いておきました。)

「逆三角関数」の代表である、
  「asin」「acos」「atan」
は「直角三角形」の「角度θ」を求める為に使用されるものです。
  「三角関数sin、cos、tan」←→「逆三角関数asin、acos、atan」
の関係性があり、
「三角関数sin、cos、tan」と「逆三角関数asin、acos、atan」は「対」となる物です。
例えば「三角関数sinθ」と「逆三角関数asin」の式を考えた時、
  「sinθ = y / r」の「三角関数の公式」
  「θ = asin(y / r)」の「逆三角関数の公式」
のように式の中に「θ」と「y / r」を使用した
「三角関数sin」と「逆三角関数asin」の関係が見て取れます。
これについては後々学んでいきます。


三角関数系、基本(3/12)パターン(要「直角三角形」)
「逆三角関数」を「角度θ」を求める形に変形すると、
 「θ = asin(y / r)」(「角度θ」を斜辺「r」と縦「y」から求める)
 「θ = acos(x / r)」(「角度θ」を斜辺「r」と横「x」から求める)
 「θ = atan(y / x)」(「角度θ」を横「x」と縦「y」から求める)
 θ = acsc(r / y)」(「角度θ」を斜辺「r」と縦「y」から求める)
 θ = asec(r / x)」(「角度θ」を斜辺「r」と横「x」から求める)
 θ = acot(x / y)」(「角度θ」を横「x」と縦「y」から求める)
となります。(「角度θ」の数値は表記が「度数」か「ラジアン」かで変わるので注意)


計算例:(「逆三角関数」角度をラジアンで計算)
「r=50」「y=25」の場合の「角度θ」を求める。
  
「計算機」で「θ」を求める以下の計算をします。
  
結果「θ=(1/6)π[rad]」となります。
一応「ラジアン」を「度数」へ変換もしておきましょう。
  
結果、以下の形となります。
  

参考(度)→http://keisan.casio.jp/exec/system/1260315699
参考(ラジアン)→http://keisan.casio.jp/exec/system/1260283160



「比率(割合)と傾き」(「三角関数と逆三角関数」)


「三角関数」と「逆三角関数」の式まとめ
「比率(割合)と傾き」について説明する前に「三角関数」と「逆三角関数」の式を
一度まとめておきます。
  
「三角関数」の式で出てくる「sinA、cosA、tanA」
  「sinA」「y/r」
    
  「cosA」「x/r」
    
  「tanA」「y/x」
    
とはそれぞれ何を指しているのでしょうか?
これらの事を「三角比」とか「比率、傾き」などと呼びます。
その「比率、傾き」について説明します。

ちなみに「直角三角形」、
つまり「角度θ」が「0°<θ<90°」の範囲であれば、
「逆三角関数asin、acos、atan」を使い、
  「asin」には「sinA」(sinA=y/r)
    asin(sinA)
  「acos」には「cosA」(cosA=x/r)
    acos(cosA)
  「atan」には「tanA」(tanA=y/x)
    atan(tanA)
を与えると「角度θ」を知る事が出来ます。


「比率(割合)と傾き」とは
「比率(割合)」とは…
「比」とは以下ような事を言います。
  
これは、以下のようにも言い換える事ができ
  
これらを踏まえると「比率(割合)」を以下のように見る事ができます
  
  つまり 「y:x=3:2」の「xと比べたyの比率は1.5」と言えます。
ここからが重要です。
「tanθ = tanA = y/x」となるのは覚えていますか?
「y/x」は「xに対するyの比率」と同じ事なので、
  「tanA = xに対するyの比率」
とも言えるわけです。
つまり「sinA、cosA、tanA」はそれぞれ
  
と解釈できます。

「傾き」とは…
「sinA、cosA」を扱う時は「比率」と言う言葉を使い表現します。
  「sinA = rに対するyの比率 = y/r」
  「cosA = rに対するxの比率 = x/r」
「sinA、cosA」は「傾き」で考えた場合計算が成り立ちません。
一方、
「tanA」を扱う時は「比率」よりも「(rの)傾き」と言う言葉でよく表現されます。
  「tanA = xに対するyの比率 = y/x」
  「tanA = xに対するrの傾き = y/x」
「tanA」は「傾き」と「比率」とで同じ計算が成り立ちます。
  
  「sinA」は「rに対するyの比率
  「cosA」は「rに対するxの比率
  「tanA」は「xに対するyの比率」や「xに対するrの傾き」又は「傾き」
を省略して、
  「sinA」とは「yの比率」
  「cosA」とは「xの比率」
  「tanA」とは「(rの)傾き」
と言う事が出来ます。

では、「直角三角形」の「sinA、cosA、tanA」の数値を実際に計算してみます。
  
結果、「(xに対する)rの傾きtanA」は「4/3」となっています。
「rの傾きtanA」は「y/x」で表現されていますので、
「この直角三角形のxとy」は「xか3増えるとyが4増える」関係ですと言えます。



(三平方)ピタゴラスの定理


「(三平方)ピタゴラスの定理」(要「直角三角形」)
続いて「三角比」について説明したいのですが、
その前に「三角関数」の一つである「ピタゴラスの定理」を知っておく必要があります。
以下の定理は「ピタゴラスの定理」とか「三平方の定理」などと呼ばれます。
  
「ピタゴラスの定理」は以下のような証明(考え)に基づいています。
  
  この「正四角形1」「正四角形2」各々から
  「直角三角形」4つ分の「面積」を取り除くと
    「正四角形1」に残った面積が「斜*斜」
    「正四角形2」に残った面積が「横*横+縦*縦」
  「正四角形1」と「正四角形2」に残った面積は
  両方とも同じ面積のハズなので、
    『斜*斜 = 横*横+縦*縦』
  の状態に常になる事が分かるでしょうか?
この結果「ピタゴラスの定理」
  『r2=x2+y2
が成り立ちます。


三角関数系、基本(3/12)パターン(要「直角三角形」)
「ピタゴラスの定理」の式を「r、x、y」を求める形に変形すると、
 「r = √( x2 + y2)」(斜辺「r」を横「x」と縦「y」から求める)
 「x = √(r2 - y2)」(横「x」を斜辺「r」と縦「y」から求める)
 「y = √(r2 - x2)」(縦「y」を斜辺「r」横「x」から求める)
となります。
(本当は「√」に「±」が付きますが、辺の長さの大きさは必ず「+」になるので省略)


計算例:(ピタゴラスの定理)
「直角三角形」の「r=50」「y=25」であれば
  
  「ピタゴラスの定理」を使うと、
  「r2 = x2 + y2」=「x = ±√(r2 − y2)」なので、
  x = ±√(502 − 252)
    = ±√1875 = ±25√3
辺の長さは必ず「+」の為、結果「x = 25√3」となります。
ここから「xとy」を使用して「角度θ」も求めてみます。
  「θ = atan(y/x)」(逆三角関数)を使用します。
  θ = atan( 25/25√3 )
    = (1/6)π[rad] ←「30°」
結果、以下の形となります。
  



「三角比」の前準備


「三角比」では角度の記述に「度数法(ディグリー)」を使う
「sinθ、cosθ、tanθ」の事を「三角関数」とか「三角比」と言います。
「直角三角形」の「各辺の比率」は「sinθ、cosθ、tanθ」の「三角比」で表し、
「直角三角形」の「角度θ」は「0°〜90°の範囲内」を主に使用します。
そのため
  「三角比」を扱う時は普段から馴染みのある「度(度数法)」で表記
するのが良いでしょう。

「三角関数のsinθ、cosθ、tanθ」は「三角比のsinθ、cosθ、tanθ」を発展させたもので、
「0°〜90°の範囲外」の角度や「360度以上」の角度を扱う事になります。
「三角関数」では「単位円」と言われる円の上に「直角三角形」を配置したイメージで
円の回転周期や扇型の弧の長さの計算などを行う事になります。
円関係の計算では式の中に常に「π」が出てくる為、
円関係の計算がしやすい「ラジアン」で表記した方が計算がしやすくなります。

従って角度の記述は、
  「三角比」では「度数法(ディグリー)」
  「三角関数」では「弧度法(ラジアン)」
を使って基本的には計算を行うのが一般的です。

「三角比」を学ぶ為、ここから先は「度数法」の表記で計算を行います。
「電卓」の場合は「ディグリー(度数法)」モードにして計算を行って下さい。


「三角比」の為の前知識(重要)
「角度θ」「(rに対する)yの比率」「(rに対する)xの比率」「斜辺rの傾き」の
それぞれの「関係性」を考えてみると以下ように計算できます。
  
この結果を元にして「三角関数」「逆三角関数」の「関係性」を使うと、
以下ような相互関係で計算が出来ます。
  
「直角三角形」の「各辺」に対しての
  「yの比率(sinθ) xの比率(cosθ) rの傾き(tanθ)」の関係性
の事を「三角比」と呼びます。
この「三角比のsinθ、cosθ、tanθ」を使い、
「直角三角形」の「辺x、辺y、辺r、の値」や「角度θ」の元の値を計算してみます。
  
  とにかく「角度θ」さえ判明させてしまえば
  「sin(θ)、cos(θ)、tan(θ)」が計算可能となるので、
  「三角比」である「y比率sinA、x比率cosA、傾きtanA」が求まり
  結果、各値を求めやすくなる事がこの計算により分かると思います。

「角度θ」の「度数」を「sin、cos、tan」へ渡した時の答えは、
「計算機」があれば簡単に値を取得できますが、
「0°、30°、45°、60°、90°」の三角比「sinθ、cosθ、tanθ」
の値は頻繁に利用されるため、なんとか覚えておいた方が良いです。
これらの値の一覧表である「三角比表」や「三角関数表」と言われる
表の覚え方を学んで行きます。


三角比表「sinθ cosθ tanθ」値(「角度θ」を「比率や傾き」へ変換)の覚え方
「角度θ」を「比率や傾き」へ変換するのに、
「y比率=sin(30°)、x比率=cos(30°)、傾き=tan(30°)」など、
計算式に出る度に「計算機」で計算しても良いのですが、
ある程度の「角度θ」(0°、30°、45°、60°、90°)の「sinθ、cosθ、tanθ」は
覚えておいて損は無いです。
小学校で使用した「2種類の三角定規」を思い出して下さい。
「2種類の三角定規」の角度は「30°45°60°90°」の組合せで構成されていましたね。
「2種類の三角定規」の「各辺の比率」さえ覚えてしまえば以下のように
「sin、cos、tanの30°、45°、90°の値」を「比率や傾き」の値へ変換計算が出来ます。
  
「0°と90°」は以下のように考えます。(「直角三角形」は「ただの直線」となります)
  
これらの情報を元に「0°、30°、45°、60°、90°」の「sinθ、cosθ、tanθ」を
表にすると以下の形となります。
  
「角度θ」が「90°」を超えた時は以下のように考えます。
  
  √2=1.41421356(ひとよひとよにひとみごろ)
  √3=1.7320508(ひとなみにおごれや)
  でしたね。


「sinθ cosθ tanθ」表の覚え方2(分母の有理化済み)
「(分母の)有理化済み」の表の覚え方も紹介しておきます。
「母数の有理化」について…
「有理化」とは「√」が取れた数値です。
  分数の「母数を有理化」すると計算がしやすい場合があります。
  
  正直有理化するかの判断は、その都度自分の扱いやすい方を選べば良いと思います。
「sin(45°)」の「分母を有理化」してみるとこんな感じです。
  

「sinθ、cosθ」の「母数が有理化済み」の表は以下のように覚えます。
  
「角度θ」が「90°」を超えた時は以下のように考えます
  

この「表」を覚えていなくても困る事は無いのですが、
「分母を有理化」させる為の計算は必ず理解しておいて下さい。
「関数電卓」などで「sinθ、cosθ、tanθ」の計算を行うと、
必ず「母数が有理化」された値が計算結果として表示さる為です。



「三角比」


「三角関数」と「逆三角関数」と「比率と傾き」と「ピタゴラスの定理」まとめ
「三角比」について説明するために「三角関数」と「逆三角関数」と
「比率と傾き」と「ピタゴラスの定理」の式を一度まとめておきます。
  
「対辺、底辺、斜辺」について
上図、左上の「直角三角形」には「対辺y、底辺x、斜辺r」と書いてあります。
これまで「三角関数で扱う直角三角形」の各辺は
  「y、x、r」で表現してきました。
これは本来、
  yの辺→「対辺」(対辺は「角度θ」と接しない)
  xの辺→「底辺」(底辺の左側には常に「角度θ」があります)
  rの辺→「斜辺」(斜辺は底辺と対辺を結ぶ斜めの辺)
とそれぞれを呼びます。
このように呼ぶことで「直角三角形」が回転や反転した時でも、
  「(三角比の)底辺の比率、対辺の比率、斜辺の傾き」各辺の関係性は同じなので
  「座標のxy」とは別物として個別に計算できて便利な呼び方だからです。
  
  このような『「三角比」の回転と反転』と言われる方法はここではまだ扱いません。
  『「三角比」の回転と反転』については後述しますのでそちらで学びます。
  今は「直角三角形」の各辺「対辺、底辺、斜辺」の位置関係が分かれば良いです。

「三角比」の「角度θ」による見え方の変化と「単位円」
「直角三角形」の「角度θ」は「0°<θ<90°」の範囲です。
  
これを「90°<θ<180°」の範囲まで広げると形は「扇型や三角形」となり、
「直角三角形」では無くなってしまいます。
  
しかしこの「扇型や三角形」から余った下図の位置に「直角三角形」を見いだせば、
「90°<θ<180°」位置上に「新たな直角三角形」を常に表現する事ができます。
  
この表現方法を使い、
  「角度θ」が「0°<θ<90°」の範囲の「直角三角形」の「三角比」と
  「角度θ」が「90°<θ<180°」の範囲の「直角三角形」の「三角比」を
  「単位円」と言われる「半径r=1」に固定された円の上に配置してよく使用します。
「単位円」は
  「単位円」と言われる円、半円(「単位円」では必ず半径r=1となる)
  「xy座標」(xy座標の中心が「単位円」の中心となる)
  「直角三角形」(「三角比」対辺yの比率、底辺xの比率、斜辺rの傾き、角度θ)
の組合せでよく使われる円です。

まずは「普通の正円」に
  「角度θ」が「0°<θ<90°」の範囲の「直角三角形」
  「角度θ」が「90°<θ<180°」の範囲の「直角三角形」
をの「2つの直角三角形」を配置してみましょう。
  
次にこの「普通の正円」を「単位円」つまり「半径r=1」に変換します。
これにより「2つの直角三角形」は「三角比」に変換されます。
(「yの値」が「対辺の比率sinA」に、「xの値」が「底辺の比率cosA」に変換される)
  
  「単位円」に変換する事で「2つの直角三角形」が「三角比」化されるので、
  「三角比(対辺yの比率sinA、底辺xの比率cosA、斜辺rの傾きtanA、角度θ)」
  が分かるようになりました。
  (この図は「角度θ」が「0°<θ<90°」の範囲と「90°<θ<180°」の範囲にある
  「2つの三角比(直角三角形)」と認識しておいて下さい。
  『「三角比」の「回転や反転」』とはまったく無関係ではないのですが、
  この時点ではあくまで別物として扱います。)


「三角比」ってなに?(要「直角三角形」)
「三角比」とは「直角三角形」の各辺の「比率と傾き」の事です。
  「直角三角形」は「角度θ」が変化する事によって
  「xに対するrの傾き」が変化しその結果、
  「r、x、y」それぞれの比率が変化します。
  その比率の変化は「sinA、cosA、tanA」を使うと知る事が出来ます。
  この事を「三角比」と言います。
「三角比」のイメージは以下の形となります。
  
  「対辺率sinA、底辺率cosA、傾きtanA」を使い、
  個々の「y、x、r」の値を計算する式も記載しています。
  ここで注目したいのは、なんとか「角度θ」の値を判明させてしまえば
  「sinA=sinθ、cosA=cosθ、tanA=tanθ」となりますので
  「yの比率sinA」「xの比率cosA」「傾きtanA」が楽に計算できると言う事です。
  「角度θ」の値が知りたい場合、
  「角度θ」が「0°<θ<90°」の範囲の「直角三角形」であれば、
  「逆三角関数asin(sinA)、acos(cosA)、atan(tanA)」を
  「関数電卓」で計算する事で「角度θ」を求める事が可能です。
「三角比」のイメージは上で示した図だと少し複雑に感じるので、
シンプル化させてみます。以下の図を見て下さい。
  
  この左図のように、「底辺xの比率」「対辺yの比率」「斜辺rの傾き」を
  の事を「cosA、sinA、tanA」と「直角三角形」に直接記載する表現は
  非常に良く目にします。覚えておきましょう。
  (この表記の方が『「三角比」が「回転や反転」』した時に理解しやすくなります。)

「三角比(sinA、cosA、tanA)」がわかれば、
  「対辺の比率sinA * r =  対辺x値」
  「対辺の比率cosA * r =  底辺y値」
により「rの長さ」が変化した時の「x値y値」が簡単に求まります。
他にも沢山便利な事が起きるのが後々分かってくると思います。

では、
ここまでの事を踏まえて「三角比の公式」を3つ紹介します。
3つの「三角比の公式」を駆使すれば、
「直角三角形」の「sinA、cosA、tanA」のどれか1つがわかった時点で、
他の2つの値を筆算で求める事が出来るようになります。
(本当は3つの「三角比の公式」を駆使しなくても、
「関数電卓」で「asin(sinA)、acos(cosA)、atan(tanA)」を使い、
「角度θ」を求めてしまえば「sinA、cosA、tanA」全てを簡単に求める事が出来ます。
「逆三角関数asin(sinA)、acos(cosA)、atan(tanA)」を筆算で求める方法は
今回はやりませんが、後々できたら学びたいと思います。)


「三角比」の公式1
「sinA、cosA、tanA」の内2つを使い、残りの1つを求める事が出来る公式。
  
「sinA、cosA、tanA」の定義を『「三角比」の公式1』を使い求めてみます。
  


「三角比」の公式2
「sinA、cosA」の内どちらか1つを使い、残りの1つを求める事が出来る公式。
  
「角度θ」に対して二乗されているのではなく、
「対辺比率sinA、底辺比率cosA」に対して二乗されている事に注意して下さい。
  

この『「三角比」の公式2』は「ピタゴラスの定理」そのものです。
  
「ピタゴラスの定理」は「三角比の対辺率sinAと底辺率cosA」にも当てはまるので、
  
  とすれば「三角比の公式2」と同じと言えます。

半径が「斜辺r=1」となるように見立てた「単位円」に「直角三角形」を配置し
「対辺の比率sinA」と「底辺の比率cosA」求めると以下のようになります。
  
これを「三角比の公式3」で求めると以下の形となります。
  


「三角比」の公式3
「cosA」から「tanA」を求める事が出来る公式。

この公式は『「三角比」の公式1』の式から
『「三角比」の公式2』を使って変形させた式となります。
  



「三角関数」と「象限」


「三角関数」を使ってみる(象限)
「xy座標」の中心に自分がいて周りに「1つの物体」があるとします。
その時「自分」から「1つの物体」までの、
  「距離、角度、xy座標位置」
の関係を「直角三角形」を使えば「三角関数」と「単位円」により知る事ができます。

「1つの物体」までの距離が「本当に1(単位円と同じ)である」と仮定して
  「角度θ、x値(x比率)、y値(y比率)」
の各値を計算で求めてみますので「象限」という考え方について理解をして下さい。
(本当なら「単位円」で「物体まで距離r=1に対するx比率とy比率」を求めたら、
その「x比率とy比率」に対して「実際のr値」を掛けます。
それにより実際の「x値、y値」の値が取得できます)

「三角関数」では本来「角度の表記」を「ラジアン表記」で計算するのですが、
ここではイメージしやすいように「度数法の表記」で計算していきます。


「xy座標」と「象限」について
「xy座標」の「中心に自分」がいるとして、
「右上、左上、左下、右下」の座標の事をそれぞれ「象限」と呼びます。
  
上図のように4つそれぞれの領域の「象限」には
  「第1象限」…(右上領域「+x、+y」)
  「第2象限」…(左上領域「−x、+y」)
  「第3象限」…(左下領域「−x、−y」)
  「第4象限」…(右下領域「+x、−y」)
と名前が付きます。

「第1象限」の「三角関数」
  「第1象限」の領域に「1つの物体」がある時、以下のようなイメージとなります。
  
  (説明①)「角度θ」の計算方法は「象限」により変わります。
  後述『「逆三角関数」と「象限」』を確認して下さい。

「第2象限」の「三角関数」
  「第2象限」の領域に「1つの物体」がある時、以下のようなイメージとなります。
  
  (説明①)「角度θ」の計算方法は「象限」により変わります。
  後述『「逆三角関数」と「象限」』を確認して下さい。

「三角関数」の表
「第1象限」「第2象限」の領域に対象物がある時に必要となる「三角関数表」
  

「第3象限」「第4象限」の領域に対象物がある時に必要となる「三角関数表」
  

「第3象限」の「三角関数」
  「第3象限」の領域に「1つの物体」がある時、以下のようなイメージとなります。
  
  (説明①)「角度θ」の計算方法は「象限」により変わります。
  後述『「逆三角関数」と「象限」』を確認して下さい。  

「第4象限」の「三角関数」
  「第4象限」の領域に「1つの物体」がある時、以下のようなイメージとなります。
  
  (説明①)「角度θ」の計算方法は「象限」により変わります。
  後述『「逆三角関数」と「象限」』を確認して下さい。

「象限」の範囲と性質
「中心の自分」から見た「対象物」がどの「象限の領域(角度)」にあるかで、
「y比率sinA、x比率cosA、傾きtanA」のそれぞれに
「−マイナス」が付いたり外れたりします。
  
第1象限…(「sinA、cosA、tanA」すべて+)
  「x軸上側」+側sinA、「y軸右側」+側cosA、「傾き右肩上がり」+x+y側tanA
第2象限…(「sinA」のみ+)
  「x軸上側」+側sinA、「y軸左側−側cosA、「傾き右肩下がり−x+y側tanA
第3象限…(「tanA」のみ+)
  「x軸下側−側sinA、「y軸左側−側cosA、「傾き右肩上がり」−x−y側tanA
第4象限…(「cosA」のみ+)
  「x軸下側−側sinA、「y軸右側」+側cosA、「傾き右肩下がり+x−y側tanA

0° 360° … sinA=±0、cosA=+1、tanA=±0
90° … sinA=+1、cosA=±0、tanA=×不定
180° … sinA=±0、cosA=−1、tanA=±0
270° … sinA=−1、cosA=±0、tanA=×不定


「単位円」上での「三角関数」の定義と公式
「単位円」上の「三角関数sin、cos、tan」は常に以下ように定義されます。
  y= sin(θ)*r= sin(θ)*1= sin(θ)
  x= cos(θ)*r=cos(θ)*1=cos(θ)
つまり
  「単位円」上では常に
  y=sin(θ)
  x=cos(θ)
となります。
そして「単位円」上でも『「三角比」の公式』がそのまま使用出来ます。
  
  「三角関数」では常に「第?象限」の領域にいるかを意識する事。
  「象限」の領域により「sinA、cosA、tanA」の各「+−」状態が変化します。



「逆三角関数」と「象限」


「三角関数」と「逆三角関数」の「角度θ」について
「三角関数(sinA、cosA、tanAを求める)」では
  「第1〜4象限」の各範囲を含む「0°〜360°」の範囲中の「角度θ」であれば、
  その「角度θ」を「直角三角形の斜辺」に見立てる事により、
  「sin(θ)、cos(θ)、tan(θ)」をつかって、
  「対辺率、底辺率、傾きを求める事が可能です。
「逆三角関数(角度θを求める)」では
  「第1象限」の範囲を含む「0°以上 〜 90°未満」の範囲中の「角度θ」であれば、
  その「角度θ」を「直角三角形の斜辺」に見立てる事により、
  「asin(sinA)、acos(cosA)、atan(tanA)」を使って
  「角度θ」を求める事が可能です。


「主値」と「Asin()、Acos()、Atan()」について
「逆三角関数(角度θを求める)」を使えば「0≦θ<90°」の範囲内で、
  
の式が成り立つ事は分かりました。
では、「90°〜360°」の範囲の「角度θ」を知りたい場合はどうするのでしょうか。
以下のようになります。
  
  「逆三角関数asin()」の「主値」(正しい角度θを返す範囲)は
    「270° ≦ 角度θ ≦ 90°」←(asin()の主値範囲、Asin())
  「逆三角関数acos()」の「主値」(正しい角度θを返す範囲)は
    「0° ≦ 角度θ ≦ 180°」←(acos()の主値範囲、Acos())
  「逆三角関数atan()」の「主値」(正しい角度θを返す範囲)は
    「270° < 角度θ < 90°」←(atan()の主値範囲、Atan())
  「逆三角関数」を使い求める「角度θ」が「主値」の範囲内であれば
  常に正しい「角度θ」を求める事ができます。
「主値」の範囲内の時は分かりやすいように、
「逆三角関数」の「頭文字(イニシャル)」を
  「Asin(sinA)、Acos(cosA)、Atan(tanA)」
  「Arcsin(sinA)、Arccos(cosA)、Arctan(tanA)」
  「Sin-1(sinA)、Cos-1(cosA)、Tan-1(tanA)」
のように「大文字」で記述する事が一応のルールとなっています。


「逆三角関数」を使ってみる(主値)
「1つの物体」までの距離が「本当に1(単位円と同じ)である」と仮定して
  「x比率sinA(x値)、y比率cosA(y値)、傾きtanA」から「角度θ」
の値を「逆三角関数」で求めたとき、
「主値」の範囲内であれば正しい「角度θ」を取得できます。
「象限」に対する「主値」という考え方について理解をして下さい。

「現象」によって「asin()、acos()、atan()」で記述した式が薄い字で書かれていますが、
これは「主値」の範囲外となる部分です。とりあえず無視して下さい。
「Asin()、Acos()、Atan()」で記述された式が「主値」となります。

「第1象限」の「逆三角関数」
  「第1象限」領域にある「1つの物体」への「角度θ」を「逆三角関数」で求めます。
  
  「第1象限」は「Asin()、Acos()、Atan()」全ての「主値」範囲内です。
  「Asin()、Acos()、Atan()」の全てで正しい「角度θ」が取得できます。

「第2象限」の「逆三角関数」
  「第2象限」領域にある「1つの物体」への「角度θ」を「逆三角関数」で求めます。
  
  「第2象限」は「Acos()」の「主値」範囲内です。
  「Acos()」でのみ正しい「角度θ」が取得できます。
  「atan()」に「+180°」しても正しい「角度θ」が取得できます。
  (後述『傾きの特性「tanA、atan()」』にて説明)

「第3象限」の「逆三角関数」
  「第3象限」領域にある「1つの物体」への「角度θ」を「逆三角関数」で求めます。
  
  「第3象限」は「主値」の範囲内に入る「逆三角関数」は存在しません。
  「主値」では正しい「角度θ」を取得する事ができません。
  「atan()」に「+180°」すれば正しい「角度θ」が取得できます。  
  (後述『傾きの特性「tanA、atan()」』にて説明)

「第4象限」の「逆三角関数」
  「第4象限」領域にある「1つの物体」への「角度θ」を「逆三角関数」で求めます。
  
  「第4象限」は「Asin()、Atan()」の「主値」範囲内です。
  「Asin()、Atan()」で正しい「角度θ」を取得する事ができます。

「0° 90° 180° 270° 360°」のときは?
「第1〜4象限」のどの象限にも属さない角度、
「0° 90° 180° 270° 360°」の時、
「sinA」(y軸)と「cosA」(x軸)が
「+プラスか−マイナスか0」のどの値になるのかをまとめておきます。
  
「0°(360°)」
  sinAやy=0
  cosAやx=+プラス値(0より上)
  であれば「0°」となります。(傾きtanA=0)
「90°」
  sinAやy=+プラス値(0より上)
  cosAやx=0
  であれば「90°」となります。(傾きtanA=×不定)
「180°」
  sinAやy=0
  cosAやx=−マイナス値(0より下)
  であれば「180°」となります。(傾きtanA=0)
「270°」
  sinAやy=−マイナス値(0より下)
  cosAやx=0
  であれば「270°」となります。(傾きtanA=×不定)


傾きの特性「tanA、atan()」
「傾きの特性1」(主値)
  「逆三角関数atan()」の「主値」は「270° < 角度θ < 90°」なので、
  「270° < Atan(tanA) < 90°」の範囲内であれば正しい値が得られます。
  

「傾きの特性2」(「cosAやx」が「−マイナス値」場合は「+180°」)
  「主値」の範囲外の時は「+180°」すれば正しい値が得られます。
  (但し「90°と270°」は「×不定」の為除く)
  
  これは、
    「傾きtanA」は「180°」毎に同じ値となる
    (「tanAの周期は180°」である)
  と言う事ですので、「傾きtanA」は以下のイメージをとなります。
   

  「逆三角関数atan()」で正しい一つの「角度θの値」を得ようとした場合、
    「現象」か
    「cosAやx」が「−マイナス値」か
  のどちらかの情報が必要となります。

「傾きの特性3」(「角度θ」による「tanA」の数値の変化)
  「時計回り」に「270°から90°を目指す」と「tanAの値」は
  「−∞から+∞」へと向かいます。
  「反時計回り」に「270°から90°を目指す」と「tanAの値」は
  「+∞から−∞」へと向かいます。
  



「三角比」の回転と反転


「三角比」の回転をする為の前知識
内角の和は常に「180°」
  

外角の定理
  

「三角比」の「回転、反転」とは…
  「三角比」の「回転、反転」とは
  「角度θの変換」をする事です。
「角度θの変換」には「回転して変換」と「反転して変換」があります。
スタンダードな状態
  
にある「角度θの変換」をするのですが、
主に、
  「回転90°+」、「回転180°+」
  「反転0°−」、「反転90°−」、「反転180°−」
の5種類で「変換」を行います。
「変換後」も「x軸、y軸、第1〜第4象限」の形状に違いはありません。
「角度θ」は「変換後」には新たな「角度θ」の角度を指す形となります。


「三角比」の「回転0°+」「回転360°+」
「単位円」上に「三角比(sinA、cosA、tanA)」で「角度θ」を表現します。
  sin(θ)=sinA
  cos(θ)=cosA
  tan(θ)=tanA  
「回転も反転もされていない三角比(三角関数)」ですので特に「変換」の無い表現です。
故に「角度θ」は特に変化しません。
『sin(θ) cos(θ) tan(θ)』
  (『sin(360°+θ) cos(360°+θ) tan(360°+θ)』でも同じ角度)
  


「三角比」の回転の表現2種類「回転90°+」「回転180°+」
「三角比(sinA、cosA、tanA)」を回転させて「角度θ」を変換する方法は
主に以下の2種類となります。
『sin(90°+θ) cos(90°+θ) tan(90°+θ)』
  
  (「90°」が絡んだ時「傾きtanA」は「逆数となります」)
  実際の変換は以下のように行います。
  

『sin(180°+θ) cos(180°+θ) tan(180°+θ)』
  
  実際の変換は以下のように行います。
  


「三角比」の反転の表現3種類「反転0°−」「反転90°−」「反転180°−」
「三角比(sinA、cosA、tanA)」を反転させて「角度θ」を変換する方法は
主に以下の3種類となります。
『sin(−θ) cos(−θ) tan(−θ)』
  (『sin(0°−θ) cos(0°−θ) tan(0°−θ)』でも同じ角度)
  
  実際の変換は以下のように行います。
  

『sin(90°−θ) cos(90°−θ) tan(90°−θ)』
  
  (「90°」が絡んだ時「傾きtanA」は「逆数となります」)
  実際の変換は以下のように行います。
  

『sin(180°−θ) cos(180°−θ) tan(180°−θ)』
  
  実際の変換は以下のように行います。
  



凄く便利。「atan2」について


x値y値を元にθを取得する
xy座標をプログラム上で扱う際、
  「自分から見た(相対的な)1つの物体の
  x値y値を元に角度θを取得」
を行いたい状況がよく発生します。

「逆三角関数」などの
  「θ = atan(y / x)」
をうまく使えば計算できますが、
  「x = 0」の際は『0で割る「0除算」』となるエラー(計算不可)処理の発生
  「第1、4象限」と「第2、3象限」での同角度の傾きに対する判別処理の発生
などと、色々と気を使ってプログラムする必要があります。

C#では「atan2」関数を使用る事で、これらの処理問題を全て解決出来ます。
「atan2」は「atan」を使いやすく拡張した物です。
「atan2」の引数に「対象物のxy座標」を渡せば、
簡単に「対象物への角度θ[rad]」を得る事が出来ます。
残念ながら「関数電卓」には「atan2」の機能はありません。
「C#などのプログラム」にのみ実装されている機能です。


三角関数系、+1パターン。座標から角度を求める(要「直角三角形」)
atan2(y座標, x座標)」(「θ」を「y」と「x」から求める。-値含む全座標対応)
「atan2」は「-値含む全座標対応」の為、かなり実用的です。
xy座標値を渡せば360°全ての角度で正しいラジアン角度の値を返してくれます。


プログラム例
「x = 25√3」「y = 25」の場合
「atan2(y,x)」を行うと、
戻り値が「0.5235987755983…[red]」つまり「30°」となる。

  
            double x1 = 25 * Math.Sqrt(3); // 25√3
            double y1 = 25;
            double radianAngle = Math.Atan2(y1, x1); //ラジアン角度取得
            double degreeAngle = radianAngle / Math.PI * 180; //度数法に変換
            MessageBox.Show(">>"+ degreeAngle.ToString()+"°"); //表示「>>30°」


「関数電卓」の 「ベクトル計算」機能を使い角度を計算する場合
「関数電卓」に「ベクトル計算」機能があれば角度計算が可能です。
まず、「関数電卓」を「ベクトル計算」のモードにして下さい。
次に、「2次元」のベクトルを2つ登録します。
  「VctA」へ「[0, 10]」等を登録後、(「x」を10としたが、「x」は幾つでもよい。)
  「VctB」へ「[25, 25√3]」(25√3→43.30127019)を登録します。
「ベクトルのなす角」を選択し、
  「Angle(VcaA, VcaB)」
のように計算が出来る「関数電卓」であれば、
  「0.5235987755983[red]」か「30°」
と角度の計算結果が表示されると思います。

  


2点間座標から角度と直線距離を計算、角度と距離からxy座標を計算(プログラム例)
「2点間座標から角度を計算」「2点間座標から直線距離を計算」
「角度と距離からxy座標を計算」のプログラム例です。
        /// <summary>
        ///2点間の角度を計算
        /// </summary>
        private double GetDegreeAngle(double aX, double aY, double bX, double bY)
        {
            double radianAngle = Math.Atan2((bY - aY), (bX - aX));
            return (radianAngle / Math.PI * 180);
        }

        /// <summary>
        ///2点間の直線距離を計算
        /// </summary>
        private double GetDistance(double aX , double aY, double bX , double bY)
        {
            double distance = Math.Sqrt(Math.Pow((bX - aX), 2) + Math.Pow((bY - aY), 2));
            return distance;
        }

        /// <summary>
        ///角度と距離からxy座標を計算
        /// </summary>
        private Tuple<double,double> GetToXY(double degreeAngle, double distance)
        {
            double radianAngle = degreeAngle * Math.PI / 180;
            double resultY = Math.Sin(radianAngle) * distance;
            double resultX = Math.Cos(radianAngle) * distance;
            return Tuple.Create(resultX, resultY);
        }

以下のような形で使用します。
            double x1 = 0;
            double y1 = 0;
            double x2 = 25 * Math.Sqrt(3); // 25√3→43.3012701…
            double y2 = 25;

            //2点間の角度を計算
            double resultDegreeAngle = GetDegreeAngle(x1, y1, x2, y2);
            //表示「角度>>30°」
            MessageBox.Show("角度>>" + resultDegreeAngle.ToString() + "°");
         
            //2点間の直線距離を計算
            double resultDistance = GetDistance(x1, y1, x2, y2);
            //表示「距離>>50」
            MessageBox.Show("距離>>" + resultDistance.ToString());

            //角度と距離からxy座標を計算
            Tuple<double, double> resultXY = GetToXY(30.0, 50.0);
            //表示「座標x>43.3012701892219 座標y>25」
            MessageBox.Show("座標x>" + resultXY.Item1 +" 座標y>"+resultXY.Item2); 


上を0°とした時計回りの角度での変換
「atan2」の角度を人がイメージしやすい以下の角度に変換してみます。
  
「反転90°−θ」を使えばなんとかなりそうです。
  
実際に作成した
「getAngleChange」関数と「getAngleChangeAtan2」関数のコードは以下の形となります。
        /// <summary>
        ///「右0°の反時計回り←→上0°の時計回り」角度変換
        /// </summary>
        private double getAngleChange(double radianAngle)
        {
            double y1 = Math.Sin(radianAngle);
            double x1 = Math.Cos(radianAngle);
            //「90°-θ」をする為、引数のyとxを入れ替える
            double newRdianAngle = Math.Atan2(x1, y1);
            return newRdianAngle;
        }

        /// <summary>
        ///上を0°とした時計回りの角度をラジアンで返す
        /// </summary>
        private double getAngleChangeAtan2(double y1, double x1)
        {
            //「90°-θ」をする為、引数のyとxを入れ替える
            double radianAngle = Math.Atan2(x1, y1);
            return radianAngle;
        }

「getAngleChange」「getAngleChangeAtan2」使用例
            string msgtxt = "";
            for (int i = 0; i < 9; i++)
            {
                double radianAngle = i * (Math.PI / 4);//i*45°

                //atan2で計算(度数法表記)
                msgtxt += "(atan2)";
                msgtxt += (radianAngle / Math.PI * 180).ToString() + "°>>";
                double tmpAngle = Math.Atan2(Math.Sin(radianAngle), Math.Cos(radianAngle));
                msgtxt += (tmpAngle / Math.PI * 180);
                msgtxt += "\n";

                //getAngleChangeで計算(度数法表記)
                msgtxt += "(getAngleChange)";
                msgtxt += (radianAngle / Math.PI * 180).ToString() + "°>>";
                double tmpAngle2 = getAngleChange(radianAngle);
                msgtxt += (tmpAngle2 / Math.PI * 180);
                msgtxt += "°(";
                msgtxt += Math.Round((tmpAngle2 / Math.PI * 180) * 100.0, MidpointRounding.AwayFromZero) / 100.0;
                msgtxt += "°)\n";

                //getAngleChangeで2回計算(度数法表記)
                msgtxt += "(getAngleChange)2回目";
                msgtxt += (radianAngle / Math.PI * 180).ToString() + "°>>";
                double tmpAngle3 = getAngleChange(tmpAngle2);
                msgtxt += (tmpAngle3 / Math.PI * 180);
                msgtxt += "°(";
                msgtxt += Math.Round((tmpAngle3 / Math.PI * 180) * 100.0, MidpointRounding.AwayFromZero) / 100.0;
                msgtxt += "°)\n";

                //getAngleChangeAtan2で計算(度数法表記)
                msgtxt += "(getAngleChangeAtan2)";
                msgtxt += (radianAngle / Math.PI * 180).ToString() + "°>>";
                double tmpAngle4 = getAngleChangeAtan2(Math.Sin(radianAngle), Math.Cos(radianAngle));
                msgtxt += (tmpAngle3 / Math.PI * 180);
                msgtxt += "°\n";
                msgtxt += "\n";
            }
            MessageBox.Show(msgtxt);

「atan2」と
作成した「getAngleChange」「getAngleChangeAtan2」とで
角度の違いは以下のようになります。
  

以下のような実行結果を得る事が出来るはずです。
  



「atan2」を自作する


「atan2」が返す角度
「atan2」は非常に便利な関数です。
引数に「対象物のxy座標」を渡せば、
簡単に「対象物への角度θ[rad]」を得る事が出来ます。
ここまで学んできた「三角関数」の知識を使い、
この「atan2」と同じ処理をする関数を自作してみようと思います。
  

「atan2」自作の為の準備
「atan2」を自作する為には、
処理のをどのようにすべきか考えてみます。
まず、
「x座標」が「0」の場合「y/x」が出来ない為、
「不定の回避」をする為の処理を考えます。
  
次に、
「x座標」が「0より大きく」なった時の処理を考えます。
  
そして、
「x座標」が「0より小さく」かつ、
「y座標」が「0以上」となった時の処理を考えます。
  
更に、
「x座標」が「0より小さく」かつ、
「y座標」が「0より小さく」なった時の処理を考えます。
  
あとは、これらの考えをプログラムに落とし込みます。


「myMakeAtan2」関数のプログラム
完成した「myMakeAtan2」関数は以下の形となります。
        /// <summary>
        ///「自作atan2」
        /// </summary>
        private double MyMakeAtan2(double y1, double x1)
        {
            double resultAngle = 0.0;
            //不定の回避処理
            //x座標が0の場合「tan(y/x)」がエラーとなるのでそれの回避
            if (x1 == 0)
            {
                if (y1 == 0)
                {
                    resultAngle = 0.0; //0°のラジアンを返す
                }
                else if (0 < y1)
                {
                    resultAngle = (Math.PI / 2); //90°のラジアンを返す
                }
                else if (y1 < 0)
                {
                    resultAngle = -(Math.PI / 2); //-90°(270°)のラジアンを返す
                }
            }
            //「-90°<角度θ<90°」の範囲の処理(x=0を除く)
            else if (0 < x1)
            {
                resultAngle = Math.Atan(y1 / x1);
            }
            //「90°<角度θ≦180°」「-180°<角度θ<-90°」の範囲の処理
            else if (x1 < 0)
            {
                //「90°<角度θ≦180°」
                if (0 <= y1)
                {
                    resultAngle = Math.Atan(y1 / x1) + Math.PI;
                }
                else if (y1 < 0)
                {
                    resultAngle = Math.Atan(y1 / x1) - Math.PI;
                }
            }
            return resultAngle;
        }

「myAtan2」使用例です。
            string msgtxt = "";
            for (int i = 0; i < 9; i++)
            {
                double radianAngle = i * (Math.PI / 4);//i*45°;
                //atan2で計算(度数法表記)
                msgtxt += "(atan2)";
                msgtxt += (radianAngle / Math.PI * 180).ToString() + "°>>";
                double tmpAngle = Math.Atan2(Math.Sin(radianAngle), Math.Cos(radianAngle));
                msgtxt += (tmpAngle / Math.PI * 180);
                msgtxt += "\n";
                msgtxt += "(MyMakeAtan2)";
                msgtxt += (radianAngle / Math.PI * 180).ToString() + "°>>";
                double tmpAngle2 = MyMakeAtan2(Math.Sin(radianAngle), Math.Cos(radianAngle));
                msgtxt += (tmpAngle2 / Math.PI * 180);
                msgtxt += "\n\n";
            }
            MessageBox.Show(msgtxt);

実行すると以下のような表示となります
  
うまく「atan2」と同じ結果の関数を自作出来ました。




C# 統計・微分積分・線形代数への道
次へ→http://1studying.blogspot.jp/2017/08/senkei-index.html#kuw02






以下のサイトを参考にしました。

三角比・三角関数
http://www24.atpages.jp/venvenkazuya/math1/trigonometric_ratio1.php
http://www24.atpages.jp/venvenkazuya/math1/trigonometric_ratio2.php
http://www24.atpages.jp/venvenkazuya/math1/trigonometric_ratio3.php
http://www24.atpages.jp/venvenkazuya/math1/trigonometric_ratio4.php
http://www24.atpages.jp/venvenkazuya/math1/trigonometric_ratio5.php
http://www24.atpages.jp/venvenkazuya/math1/trigonometric_ratio6.php

cos,sin,tanの値の対応表
http://www24.atpages.jp/venvenkazuya/math1/trigonometric_ratio6_table1.php

cos,sin,tan,cosec,sec,cotの値の対応表
http://www24.atpages.jp/venvenkazuya/math1/trigonometric_ratio6_table2.php

三角関数講座
http://78578203.at.webry.info/theme/7addd6aad5.html

三角比・三角関数の公式一覧。正弦・余弦・加法定理など
https://atarimae.biz/archives/18041

三角関数の基礎知識。sinθ cosθ tanθ の覚え方・孤度法・三角比の表まとめ
https://atarimae.biz/archives/18037

【図形と計量】sin,cos,tanの値の覚え方
http://kou.benesse.co.jp/nigate/math/a14m0313.html

高校で学べない人のための三角比と三角関数
http://www.geocities.co.jp/Technopolis/1505/sin.htm

逆三角関数の値
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1128926906

逆三角関数の「sin-1()」「Sin-1()」「asin()」「Asin()」の違い
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1191807661

Wiki:逆三角関数
https://ja.wikipedia.org/wiki/%E4%B8%89%E8%A7%92%E9%96%A2%E6%95%B0#.E9.80.86.E4.B8.89.E8.A7.92.E9.96.A2.E6.95.B0

数Iの三角比についての質問
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1134917496
sin(π/2+θ)=cosθ等の三角関数の公式の覚え方
http://integers.hatenablog.com/entry/2016/02/27/220804
【三角関数の基礎】必ず覚えておかなくてはならない5つの性質
https://juken-mikata.net/how-to/mathematics/sankakukansu.html
【三角関数の基礎】試験にでる要点まとめ
https://juken-mikata.net/how-to/mathematics/sankakukansu-youten.html
「sin(90° − θ) = cos θの加法定理を使った導きかた」
https://www.hmg-gen.com/sankaku90.pdf
三角比の公式 tanA=sinA/cosAの証明
http://manapedia.jp/text/2197
高校数学で習う三角関数の公式一覧と覚え方
加法定理の公式を覚えよう、積和公式を覚えよう、和積公式を覚えよう
http://media.studytown.jp/official-list-of-trigonometric-function/
数学Ⅰの三角比(サイン・コサイン・タンジェント)で使う公式の一覧
http://manapedia.jp/text/2177

90°+θ,180°+θなどの三角比の公式と覚え方
https://mathtrain.jp/kangenkoushiki

2つの座標から角度や距離を求める
https://qiita.com/arthur87/items/23d3c896dafbc8223fd5
2点間の距離と角度と座標の求め方
https://qiita.com/Hoshi_7/items/d04936883ff3eb1eed2d



0 件のコメント:

コメントを投稿

↑Topへ