DOBON.NETプログラミング道掲示板

[ 最新記事及び返信フォームをトピックトップへ ]

■35556 / inTopicNo.1)  2つのradの数値から1つの角度を求めるコードを改善できますか?(C++)
  
□投稿者/ キリシロ 一般人(1回)-(2023/12/01(Fri) 19:19:45)
  • アイコン環境/言語:[環境(エディション:Windows 11 Home バージョン:21H2)、使用言語(C++)、使用ソフト(Visual Studio 2022)] 
    分類:[.NET] 

    <目的>
    すでに、コードは完成したが角度を求める式を改善できるのではないかと思う。

    <このコードの目的>
    操作するためのキー入力(縦方向と横方向)を取得した際に、この二つの値(rad)を送ると操作対象の進行方向を0〜360度の間で求める関数を作成したい。

    <このコードの考え>
    rtanは、下が-1からはじまり、上の1までの縦軸の値と考える
    1

    rtan

    -1
    rcosは、左が-1からはじまり、右の1までの横軸の値と考える

    -1 → rcos → 1

    そうすることでこの二つの変数は十字の関係になり、角度が求められる。

    ................1
    ..............↑
    -1 → angle → 1
    ..............↑
    ..............-1

    ................90
    ................↑
    180 → angle → 0
    ................↑
    ..............270

    <送られてくる変数の範囲>
    -1.0 <= rtan,rcos <= 1.0

    <コード>
    double Function::AfTC(double rtan, double rcos)
    {
    double ctan = atan(rtan) * (double)180 / PI;
    double ccos = acos(rcos) * (double)180 / PI;
    double angle = (ccos == (double)0 ? (ctan < (double)0 ? (double)360 + ctan : ctan) : (ccos - ctan) * ((double)180 / ccos));
    return angle;
    }

    <入力例>
    1:rtan = 1.0, rcos = 0.0
    2:rtan = 0.0, rcos = -1.0
    3:rtan = -1.0, rcos = 0.0
    4:rtan = 0.0, rcos = 1.0
    5:rtan = 1.0, rcos = -1.0
    6:rtan = 1.0, rcos = 1.0
    7:rtan = -1.0, rcos = 1.0

    <出力例>
    1:angle = 90
    2:angle = 180
    3:angle = 270
    4:angle = 0
    5:angle = 135
    6:angle = 45
    7:angle = 315

    <追記>
    一通り注意事項を読んで投稿しましたが、足りていない部分がありましたらご指摘のほどよろしくお願いいたします。
マルチポストを報告
違反を報告
引用返信 削除キー/
■35557 / inTopicNo.2)  Re[1]: 2つのradの数値から1つの角度を求めるコードを改善できますか?(C++)
□投稿者/ kiku 一般人(3回)-(2023/12/11(Mon) 09:34:48)
  • アイコンNo35556に返信(キリシロさんの記事)

    下記の考え方で計算できそうです。

    rcosをXとする。rtanをYとする。
    X、Y共に、-1.0から+1.0の値を取るとする。
    2次元平面上に、点(X,Y)をプロットし、
    その点までの角度を求める。

    ●X=0の場合
    ・Y>0ならば、90[度]
    ・Y=0ならば、0[度]
    ・Y<0ならば、270[度]

    ●X>0の場合
    ・Y>=0ならば、ATAN(Y/X)*180/PI[度]
    ・Y<0ならば、ATAN(Y/X)*180/PI+360[度]

    ●X<0の場合
    ・ATAN(Y/X)*180/PI+180[度]

違反を報告
引用返信 削除キー/
■35558 / inTopicNo.3)  Re[2]: 2つのradの数値から1つの角度を求めるコードを改善できますか?(C++)
□投稿者/ キリシロ 一般人(2回)-(2023/12/11(Mon) 16:54:03)
  • アイコンkikuさん、返信ありがとうございます。
    「送られてくる2つの変数を座標の点として見る」という考え方にまさにその通りと、思いました。
    それと、その考え方を元にコードを書いてみましたが、問題なく動作しましたし、コードも見やすくなりました。
    一応、書いたコードを載せて置きます。
    <コード>
    double Function::AfTC(double y, double x)
    {
    double angle;

    if (x > 0.0)
    {
    if (y < 0.0)
    angle = atan(y / x) * 180.0 / PI + 360.0;
    else
    angle = atan(y / x) * 180.0 / PI;
    }
    else if (x < 0.0)
    {
    angle = atan(y / x) * 180.0 / PI + 180.0;
    }
    else
    {
    if (y > 0.0)
    angle = 90.0;
    else if (y < 0.0)
    angle = 270.0;
    else
    angle = 0.0;
    }

    return angle;
    }
解決み!
違反を報告
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/


- Child Tree -