53032


`float a float
b`なのですが`cos`関数は引数にラジアンの値をいれてその`cos`が帰ってるくるとい仕様になっていますがつまりラジアンの値を入れる`float
a`が正解で`float b`は４５というラジアンの値が入ってることになるので不正解ということなのでしょうか？  
また三角関数のライブラリの`cos tan sin`の結果は `x y r` 各場所が１の時の角度つまり  
数学の早見表にある角度の値が帰ってくるという認識いいのでしょうか？`printf`で値を確認したのですが一応聞きました。

[code]

        float a = cos(PI / 180 * 45);
        float b = cos(45);
    
        while (ClearDrawScreen() == 0 && SetDrawScreen(DX_SCREEN_BACK) == 0 && ProcessMessage() == 0)
        {
            x  = cos(PI / 180 * angle) * r + 200;
            y  = sin(PI / 180 * angle) * r + 200;
            angle += 4;
    
    
            //Sleep(200);
            DrawFormatString(0,50,Color," a %lf",a);
            DrawFormatString(0, 65, Color, " b %lf", b);
    
            //DrawFormatString(10, 35, Color, "%d", angle);
    
            //DrawFormatString(0,0,Color,"x: %d,Y: %d",x,y);
    
            DrawGraph(x,y,gh,true);
            if (angle >= 360)
            {
                angle = 1;
            }
    
    
    
    
    
            ScreenFlip();
            if (CheckHitKey(KEY_INPUT_ESCAPE) == 1) { break; }
        }
        return 0;
    }
    
[/code]


CC BY-SA 4.0
2019-02-25T07:48:03.230
53021
2019-04-11T07:14:06.257
2019-04-11T07:14:06.257
19110
question
c++ 数学
c++ cos関数に入れる引数でラジアンと角度について知りたい。


`cos(45)` は 45 radian = `14.323944 π` の `cos` を求める正しいコードです。 `45 degree` の
`cos` を求めたいのであれば誤りです。定義上 `2 π` で周期してしまうので、あまり大きな角度の `cos` `sin`
は精度が出なくなります（ので適宜 `2 π` で角度を切ってしまうのが良いし、提示コードでもそうしていますね）。

後半は文章がアレで数学的説明になっていないのですが、単純に `cos` は余弦、 `sin` は正弦、 `tan`
は正接を、ラジアン角度体系で定義通りに返すだけです。半径１の円の円弧上のある１点から `x` 軸に垂らした垂線の足の `x` 値が `cos` 同様 `y`
軸に垂らした垂線の足の `y` 値が `sin` ですよね。

数学が苦手で提示コードの式が直観的でないということなら

[code]

    inline double deg2rad(double deg) { return PI/180.0 * deg; }
    
[/code]

なんてヘルパー関数を作っておいて `x=cos(deg2rad(angle)) * r + 200;` みたいに書けばいいでしょうし、あるいは

[code]

    inline double degcos(double deg) { return cos(deg2rad(deg)); }
    
[/code]

とか。ライブラリ関数を直に使うのがわかりにくいのであれば、ちょっと細工して自分のわかりやすいように書く工夫をしましょう。

[code]

    if (angle >= 360)
    {
        angle = 1;
    }
    
[/code]

はおかしいです（少なくともオイラは絶対に書かない）。どうしたら自然かは宿題かな。


CC BY-SA 4.0
2019-02-25T09:39:12.667
53024
2019-02-25T11:21:39.410
2019-02-25T11:21:39.410
8589
8589
53021
answer


C++のcos関数の引数には、ラジアンを単位とする角度を与えます。

X度をラジアンに変換する式は、π * (X/180) ですから、45度のcosineを計算する式は、cos(π * 45 / 180)となります。  
ですから、 float a = cos(PI / 180 * 45); で求めた aの値が 45度のcosineの値です。

cos(45)は、45度のcosineではなく、45ラジアンのcosineの値です。

＝＝  
質問の「cos tan sinの結果は x y r 各場所が１の時の角度」の部分は、意味が判りませんでした。

>
[code]

>                 x  = cos(PI / 180 * angle) * r + 200;
>                 y  = sin(PI / 180 * angle) * r + 200;
>  
[/code]

x,y,rが揃っているのは、この部分だと思うのですが、xとyはX座標とY座標(原点からX軸方向に離れている距離と、原点からY軸方向に離れている距離）ですし、rは基準点(X座標が200、Y座標が200の点)からの(直線)距離です。（角度を表しているのはangleです）

Sin,cos,tanの各関数は、直角三角形の２辺の長さの比が返ってくる関数です。角度が返ってくる関数ではありません。

下の図の頂点Aのところの角度が angleラジアン である場合、cos(angle)は b/h を返します。  
同様に、sin(angle)はa/hを、tan(angle)はa/bを返します。

[![直角三角形](https://i.stack.imgur.com/pJOKM.png)](https://i.stack.imgur.com/pJOKM.png)

＝＝  
直角三角形の辺の比を引数にとって、角度を返す関数は逆三角関数といいます。  
逆三角関数には、arcsin,arccos,arctanの３種類があります。


CC BY-SA 4.0
2019-02-25T09:42:12.627
53025
2019-02-25T09:42:12.627
217
53021
answer


> `cos(angle)` は `b/h` を返しますとありますが `b` と `h` はこの場合の数値？はどうなっているのでしょうか？

ということなので三角比の基本から教えます。fumu 7 さんの直角三角形を利用させていただきます。  
余弦 `cos` の定義は `cos(angle) = b/h` であるからこの値はただの分数を計算した値です。

ところで「分数の計算」は今まで数えきれないほどしてきたことと思います。そこで小学校のときを思い出しましょう。  
「120 km の距離を 4時間かけて歩いた。」このとき、1時間あたりどのくらいの距離を歩いたでしょうか？答えは「歩いた距離を 4 等分」すればよいので
`120(km)/4(時間) = 30 (km/時)` です。また、1 km 当たりにどのくらいの時間がかかっているでしょうか？答えは「歩いた時間を 120
等分」すればよいので `4(時間)/120(km) = 1/30 (時間/km)` です。これは 1時間は 60分であるから `1/30 (時間/km) =
60 * 1/30 = 2 (分/km)` のように考えられます。この単位の変換はおまけなので `1/30 (時間/km)` だけを考えても構わないです。  
さらに、「100 m の長さのロープが 1000 円だった。」このとき、1 m 当たりの金額は `1000(円)/100(m) = 10 (円/m)`
です。また、1 円 当たりの長さは `100(m)/1000(円) = 1/10 (m/円)` となります。

これらの例でわかったかと思いますが、`分子/分母` を計算した値は「分母を 1
とみなしたときの分子の値」を表します。上の例で確認してみてください。それが終わったら `cos(angle)`
の値は何を表しているかを考えましょう。`cos(angle) = b/h = 底辺の長さ/斜辺の長さ` です。ということは `cos(angle)`
の値は「斜辺の長さが 1 のときの【底辺の長さ】」を表します。もっと簡単に言えば Fumu 7 さんの直角三角形を「斜辺の長さが 1
となるように拡大(または縮小)を行ったときの【底辺の長さ】」を表します。  
`sin(angle)` も同様に考えると「斜辺の長さが 1
となるように拡大(または縮小)を行ったときの【高さ】」を表します。このとき出来た直角三角形をイメージすると「斜辺の長さが 1」「底辺の長さが
`cos(angle)`」「高さが `sin(angle)`」ということになり、三平方の定理を用いると
`1^2=cos^2(angle)+sin^2(angle)` という有名な等式や `tan(angle)` を考えると
`tan(angle)=sin(angle)/cos(angle)` などという関係がわかります。

また、`tan(angle) = 高さ/底辺の長さ` であるので `tan(angle)` の値は Fumu 7 さんの図を「底辺の長さが 1
となるように拡大(または縮小)したときの【高さ】」を表すことになります。


CC BY-SA 4.0
2019-02-25T13:32:23.890
53032
2019-02-25T13:37:36.697
2019-02-25T13:37:36.697
27509
27509
53021
answer