DOBON.NETプログラミング道掲示板
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
[ スレッド内全2レス(親記事-2 表示) ] <<
0
>>
■35556
/ 親記事)
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
<追記>
一通り注意事項を読んで投稿しましたが、足りていない部分がありましたらご指摘のほどよろしくお願いいたします。
マルチポストを報告
Javascriptを有効にしてください
この投稿がマルチポスト(全く同じ内容の投稿が別の掲示板に投稿されている)の場合は、以下のフォームをご利用いただくと、報告の投稿が簡単に行えます。
このフォームに必要事項を入力後、「返信フォームに入力する」ボタンをクリックすると、このページの下にある
返信フォーム
の項目が自動的に埋まります。実際に投稿するには、その後、返信フォームの「送信」ボタンをクリックしてください。
このフォームを利用しても返信フォームが埋まるだけですので、後で書き直してから投稿することもできます。
「マルチポストされている場所」には、マルチポストされている場所のURLを入力してください。複数のURLを改行区切りで入力することができます。
マルチポストされている場所
オプション
マルチポスト先の投稿が、別人によるいたずらである可能性が高い
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
■35557
/ ResNo.1)
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[度]
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
■35558
/ ResNo.2)
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;
}
解決
済
み!
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
このスレッドをツリーで一括表示
スレッド内ページ移動 / <<
0
>>
このスレッドに書きこむ
入力内容にタグは利用できません。
引用部分(行頭に「>」や「■」が付いている部分)が全体の 80% 以上のコメントは投稿できません。
半角カナは使用しないでください。文字化けの原因になります。
削除キーを覚えておくと、自分の記事の編集・削除ができます。
記事中に No*** のように書くとその記事にリンクされます(No は半角英字/*** は半角数字)。
使用例)
No123 → 記事No123の記事リンクになります(指定表示)。
No123,130,134 → 記事No123/130/134 の記事リンクになります(複数表示)。
No123-130 → 記事No123〜130 の記事リンクになります(連続表示)。
投稿前に必ずお読みください
初めて投稿される方は、必ず「
書き込みのルールについて(12/4/2更新)
」をお読みください。
読むのが面倒、ルールを守りたくないという方は、「
お気楽掲示板
」へ投稿してください。
質問を投稿する場合は、「
質問をする際のアドバイス
」を参考にしてください。
投稿は、明記のない限り、パブリックドメインになります。
マルチポストされた投稿を報告する時は匿名で投稿し、マルチポストされている場所を併記してください。以下のリンクをクリックしていただくと、自動で下のフォームが埋まりますので、その後「送信」ボタンを押してご投稿ください。
マルチポストの報告をする
マルチポストの報告をするが、マルチポスト先の投稿が嫌がらせである(元の投稿者とは別人が行なっている)可能性が高い
(投稿日時に開きがあり、こちらの投稿の方が早い場合は、その可能性が高いです)
Name
/
E-Mail
/
Title
/
URL
/
Comment/ 通常モード->
図表モード->
(適当に改行して下さい/半角10000文字以内)
■No35558に返信(キリシロさんの記事) > 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; > }
File
/
アップ可能拡張子=> /
.gif
/
.jpg
/
.png
/.zip
1) 太字の拡張子は画像として認識されます。
2) 画像は初期状態で縮小サイズ250×250ピクセル以下で表示されます。
3) 同名ファイルがある、またはファイル名が不適切な場合、
ファイル名が自動変更されます。
4) アップ可能ファイルサイズは1回
20KB
(1KB=1024Bytes)までです。
5) ファイルアップ時はプレビューは利用できません。
6) スレッド内の合計ファイルサイズ:[0/300KB]
残り:[300KB]
Icon
/
ホイールロボ
くるりロボ
ぱんだ
ふとめネコ
ねずみ
こあら
疑問ねこ
ランダム
管理者用
(画像を選択/
サンプル一覧
)
削除キー
/
(半角8文字以内)
解決
済
み!
BOX/
解決したらチェックしてください!(スレッドを閉じる目的ではチェックしないでください!)
クリエイティブ・コモンズ・ライセンス
を Comment の末尾に挿入するには、以下のリンクをクリックしてください。(Javascript で挿入しているだけです。)
表示(CC BY)
|
表示-改変禁止(CC BY-ND)
|
表示-継承(CC BY-SA)
|
表示-非営利(CC BY-NC)
|
表示-非営利-改変禁止(CC BY-NC-ND)
|
表示-非営利-継承(CC BY-NC-SA)
プレビュー/
クッキーに保存しない/
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-