検索結果 236 件: atan2

検索クエリ: atan2

by あたっしゅ
3年前
フォーラム: C言語何でも質問掲示板
トピック: マウスカーソルの座標を入手
返信数: 8
閲覧数: 5965

Re: マウスカーソルの座標を入手

東上☆海美☆「

> VisualStudio2019で

なぜ、最新版である VisualStudio2022 でないのか ?
PC のスペックが低くて、VisualStudio2022 が動かない、というのであれば、その PC は、プログラミング初心者がゲームを作るのには向かない。


> プレイヤー(画像)が常にマウスカーソルの方向を向くようにしたいのですが、何か良いコードはありませんか?

2D なのか、3D なのか、すら、書かれていない。

search.php?keywords=atan2
atan2』で検索すれば、情報あるかも。

by dic
3年前
フォーラム: C言語何でも質問掲示板
トピック: 実際に二分探索を使うとして
返信数: 4
閲覧数: 11884

Re: 実際に二分探索を使うとして

STLを使える人は使って、使えない人は苦労して実装するということに
落ち着きました。
角度を求める atan2(y,x) のような感じでしょうか
実行結果さえ正しければ、途中はプログラマの力量次第で
色々変化するのは、特に問題ないということですね。
モヤモヤが少しとれました。ありがとうございました。
by みけCAT
3年前
フォーラム: C言語何でも質問掲示板
トピック: 特定の角度を返す関数
返信数: 15
閲覧数: 11131

Re: 特定の角度を返す関数

どうしても「角度」を求めたいのであれば、三角関数が目的の値を返す角度を二分探索する方法もあるかもしれません。
dic さんが書きました:
3年前
atan2 は中身がわからないので、使えないのです。
atanは使えますか?
by dic
3年前
フォーラム: C言語何でも質問掲示板
トピック: 特定の角度を返す関数
返信数: 15
閲覧数: 11131

Re: 特定の角度を返す関数

>> a = abs(x2 - x);
>> b = abs(y2 - y);
>
>なぜ abs ?
x2 > x のときと x > x2 の2通りがあるので



>> angle = 180 / (si * 3.1415);
>
>これは何を計算している?
Θから度数に変換してます。


atan2 は中身がわからないので、使えないのです。
by usao
3年前
フォーラム: C言語何でも質問掲示板
トピック: 特定の角度を返す関数
返信数: 15
閲覧数: 11131

Re: 特定の角度を返す関数

> a = abs(x2 - x);
> b = abs(y2 - y);

なぜ abs ?

---

> angle = 180 / (si * 3.1415);

これは何を計算している?

---

・角度が欲しいなら atan2 でも使えばいいんじゃないかな.自前で計算する必要ある?
・それ以前に sin と cos の値が必要な場面なのであれば,そもそも「角度」を計算する必要すら無いっていう.
by くろのま
5年前
フォーラム: C言語何でも質問掲示板
トピック: DXライブラリ ホーミングがうまくできない
返信数: 4
閲覧数: 5785

Re: DXライブラリ ホーミングがうまくできない

... { //敵の弾の座標を格納(ホーミング) if (EbulletCounter[j] == 60) { if (enemySFlag[j] == 0) { enemyB_x[j] = enemy_x[j]; enemyB_y[j] = enemy_y[j] + 15; angle[j] = atan2((double)enemy_y[j] - playerplase_y, (double)enemy_x[j] - playerplase_x); enemySFlag[j] = 1; EbulletCounter[j] = 0; break; } } } for (j = 6; j ...
by くろのま
5年前
フォーラム: C言語何でも質問掲示板
トピック: DXライブラリ ホーミングがうまくできない
返信数: 4
閲覧数: 5785

DXライブラリ ホーミングがうまくできない

... { //敵の弾の座標を格納(ホーミング) if (EbulletCounter[j] == 60) { if (enemySFlag[j] == 0) { enemyB_x[j] = enemy_x[j]; enemyB_y[j] = enemy_y[j] + 15; angle = atan2((double)enemy_y[j] - playerplase_y, (double)enemy_x[j] - playerplase_x); enemySFlag[j] = 1; EbulletCounter[j] = 0; break; } } } for (j = 6; j ...
by 初心者
5年前
フォーラム: C言語何でも質問掲示板
トピック: 2Dゲームにおける索敵が作動しない【Unity】
返信数: 0
閲覧数: 9593

2Dゲームにおける索敵が作動しない【Unity】

... + center.y; return new Vector2(x, y); } public float GetAngle(Vector2 start, Vector2 target) { Vector2 dt = target - start; float rad = Mathf.Atan2(dt.y, dt.x); float degree = rad * Mathf.Rad2Deg; return degree; } void Start() { agent = GetComponent<NavMeshAgent2D>(); prev = transform.position; ...
by Masa1240
5年前
フォーラム: C言語何でも質問掲示板
トピック: 2DRPGゲームにおける、巡回中に視線内の主人公を追う敵キャラの作成
返信数: 3
閲覧数: 5081

Re: 2DRPGゲームにおける、巡回中に視線内の主人公を追う敵キャラの作成

... { Debug.Log("Enter"); if (other.tag == "Player") { var vec = (transform.position - player.transform.position).normalized; var playerAngle = (Mathf.Atan2(vec.y, vec.x) * Mathf.Rad2Deg) - 90.0f; var agentDirection= transform.eulerAngles.z; var angle = (Mathf.DeltaAngle(playerAngle, agentDirection)); ...
by Masa1240
5年前
フォーラム: C言語何でも質問掲示板
トピック: 2DRPGゲームにおける、巡回中に視線内の主人公を追う敵キャラの作成
返信数: 3
閲覧数: 5081

2DRPGゲームにおける、巡回中に視線内の主人公を追う敵キャラの作成

... { Debug.Log("Enter"); if (other.tag == "Player") { var vec = (transform.position - player.transform.position).normalized; var playerAngle = (Mathf.Atan2(vec.y, vec.x) * Mathf.Rad2Deg) - 90.0f; var agentDirection= transform.eulerAngles.z; var angle = (Mathf.DeltaAngle(playerAngle, agentDirection)); ...
by かずま
5年前
フォーラム: C言語何でも質問掲示板
トピック: 靈異伝のお祓いの再現
返信数: 2
閲覧数: 9074

Re: 靈異伝のお祓いの再現

lego hasiri さんが書きました:
5年前
自力で実装しても陰陽玉が変な方向に飛んでばかりです。
atan を使うと結果は [-π/2, π/2] の範囲にしかなりません。。
atan2 を使うと結果が [-π, π] になってうまく行くのではありませんか?

コード:

	double ang = atan2(
		static_cast<double>(-mBall.mPos.y + window.WindowRect.y - PLAYER_SIZE.y / 2.0),
		static_cast<double>(mPlayer.mPos - mBall.mPos.x));
by こたん
6年前
フォーラム: C言語何でも質問掲示板
トピック: DirectXでロックオンカメラの実装
返信数: 1
閲覧数: 7277

DirectXでロックオンカメラの実装

... targetVec = enemy->m_pMyModel->m_pos - player->m_pMyModel->m_pos; targetVec = XMVector3Normalize(targetVec); //angle = atan2(targetVec.m128_f32[0], targetVec.m128_f32[2]) + PI; //mat = XMMatrixRotationY(angle); //targetVec = XMVector3TransformCoord(targetVec, mat); } ...
by かずま
7年前
フォーラム: C言語何でも質問掲示板
トピック: 太線の描画アルゴリズム
返信数: 34
閲覧数: 23309

Re: 太線の描画アルゴリズム

... s1 = n2.A, s2 = n2.C; else s1 = n2.B, s2 = n2.D; const double PI = 3.141592653589793238; x = s1.x - n2.P.x, y = s1.y - n2.P.y; double t1 = atan2(y, x); x = s2.x - n2.P.x, y = s2.y - n2.P.y; double t2 = atan2(y, x); if (abs(t2 - t1) > PI) if (t1 < 0) t1 += 2*PI; else if (t2 < 0) t2 += 2*PI; ...
by ttb
7年前
フォーラム: C言語何でも質問掲示板
トピック: opencvのmatへのアクセスについて
返信数: 2
閲覧数: 2593

opencvのmatへのアクセスについて

開発環境
OS windows10
visual studio 2017 c++
opencv3.4.1

float型のmatのある座標へ値を代入したいのですが,構文エラーでデバックできません.
コードのどこが間違っているのか,教えて頂きたいです.
宜しくお願いします.

コード:

Mat abc(480, 640, CV_32FC3);
abc.at<float>(200, 200)[0] = atan2(1.00, -1.00);
by t_n_y_09
7年前
フォーラム: C言語何でも質問掲示板
トピック: Arduinoで加速度センサーと地磁気センサーを使いたい
返信数: 2
閲覧数: 11104

Arduinoで加速度センサーと地磁気センサーを使いたい

... 2); Serial.print("x\t"); Serial.print(acc_y, 2); Serial.print("y\t"); Serial.print(acc_z, 2); Serial.print("z\t"); float acc_angle_x = atan2(acc_x, acc_z) * 360 / 2.0 / PI; float acc_angle_y = atan2(acc_y, acc_z) * 360 / 2.0 / PI; float acc_angle_z = atan2(acc_x, acc_y) * 360 / 2.0 ...
by 鈴狼
7年前
フォーラム: C言語何でも質問掲示板
トピック: 弾幕STGにおけるオブジェクトの参照渡しと返り値について
返信数: 2
閲覧数: 10004

弾幕STGにおけるオブジェクトの参照渡しと返り値について

... Player player); void draw() const override; private: void shot_B(EnemyManager& enemyManager, Player player, Shot& shot); //ボスの弾幕を呼び出す float bossatan2(EnemyManager enemyManager, Player player); std::shared_ptr<Shot> _bossShot; //ボスショット }; Bulletmanager.cpp #include "../include/BulletManager.h" ...
by 山下
7年前
フォーラム: C言語何でも質問掲示板
トピック: 13章敵のショットが表示されません。
返信数: 1
閲覧数: 2001

13章敵のショットが表示されません。

龍神録13章の敵のショットが表示されません。
エラー部分で atan2,cos.sinが定義されていないと出るのですがどこで定義されているのでしょうか?
atan2,cos,sinを消したらコンパイルすることは出来るのですが、敵はショットを打ってくれません。
12章までは完了していて出来ています。
解決お願いします。
by usao
7年前
フォーラム: C言語何でも質問掲示板
トピック: 3D空間における追尾弾について
返信数: 2
閲覧数: 3277

Re: 3D空間における追尾弾について

例えば15行目の式とか,やりたいことと合っていますか?

> double dir2 = Math.atan2(loc1.getY() - loc0.getY(), loc1.getX() - loc0.getX()); // 追尾すべき垂直向き

目標とx座標が一致している場合には(z座標の不一致具合に関わらず)真上か真下を目指す?
(本当はX-Z平面との角度を考えたいのだろうか?)
by fm
9年前
フォーラム: C言語何でも質問掲示板
トピック: 自機狙いが自機狙いされない
返信数: 3
閲覧数: 2999

Re: 自機狙いが自機狙いされない

... 逆に、角度アルファが分からない場合、どうするかというと、Y/Xの傾きから角度を導きだすのが、 tan(タンジェント)の逆関数であるアークタンジェントです。その場合は、0度~359度を出すためにc言語などでは atan2関数を使います。角度が分かればあとは、 x+=cos(角度をラジアンに変換してください);、y+=sin(角度をラジアンに変換してください); とすれば、目的の座標に到達できると思います。 3.自作アークタンジェントを使う YとXの差分が分かるなら、敵の座標を中心として、自機の座標がどこの象限にいるのかを確認したうえで ...
by はじめまして!
9年前
フォーラム: C言語何でも質問掲示板
トピック: セグメンテーション違反?!
返信数: 2
閲覧数: 1660

セグメンテーション違反?!

... dxdt=rdx-L5*cos(rdth); dydt=rdy-L5*sin(rdth); alpha = acos((-dxdt*dxdt-dydt*dydt+L1*L1+(L4-L2)*(L4-L2))/(2*L1*(L4-L2))); theta2=PI-alpha; qd[0]=atan2(dydt,dxdt)-atan2((L4-L2)*sin(theta2),(L4-L2)+(L4-L2)*cos(theta2)); qd[1]=theta2+qd[0]; qd[2]=rdth-(theta2+qd[0]); for(j=0;j<NJMAX;j++){ printf("qd[%d]=%f\n\n", ...
by プラム
9年前
フォーラム: C言語何でも質問掲示板
トピック: STGにおけるホーミング弾の角度について
返信数: 13
閲覧数: 12622

Re: STGにおけるホーミング弾の角度について

... 角度でやるにしても 「x-y座標系での角度」ではなく 「弾の現在の進行方向 と それに直交する方向 の2方向を座標軸とした座標系での角度」 にすれば楽なのではないでしょうか. ("弾の進行方向にターゲットがあるときにatan2()が0度を返す世界" であれば  atan2()の戻り値の符号だけで弾が旋回すべき方向がわかる) x-y座標系上での角度値境界の跨ぎ方を全パターン網羅するように頑張る というのでもいいでしょうけど より直感的に理解しやすい方法があるならそっちの方が楽だと思います 三点を与えるとその三点間の角度を返してくれる関数ありますよね? ...
by usao
9年前
フォーラム: C言語何でも質問掲示板
トピック: STGにおけるホーミング弾の角度について
返信数: 13
閲覧数: 12622

Re: STGにおけるホーミング弾の角度について

角度でやるにしても 「x-y座標系での角度」ではなく 「弾の現在の進行方向 と それに直交する方向 の2方向を座標軸とした座標系での角度」 にすれば楽なのではないでしょうか. ("弾の進行方向にターゲットがあるときにatan2()が0度を返す世界" であれば  atan2()の戻り値の符号だけで弾が旋回すべき方向がわかる) x-y座標系上での角度値境界の跨ぎ方を全パターン網羅するように頑張る というのでもいいでしょうけど より直感的に理解しやすい方法があるならそっちの方が楽だと思います. こんな感じ? //x-y座標系での 弾→標的 ベクトルd(dx,dy) ...
by can110
9年前
フォーラム: C言語何でも質問掲示板
トピック: 2点間の最短距離について
返信数: 7
閲覧数: 4367

Re: 2点間の最短距離について

... つまり、もし円の中心がわかるのなら、角度の差だけを見ればよくなります。 さらに、円周上の各点は等間隔に並んでいる つまり、outcordの添え字位置だけから円周上の座標が決定できるなら Nを円周の分割数(1026など)とすると -Pi *(n / N) < atan2( 内部の点 - 円の中心) < Pi * ((n+1) / N) である円周上の連続する2点outcord[n], outcord[n+1]は計算で求めることができるので あとは、その角度の小さいほうが最短距離の点となります。
by みけCAT
9年前
フォーラム: C言語何でも質問掲示板
トピック: 自作STGのレーザーの表示について。
返信数: 18
閲覧数: 11371

Re: 自作STGのレーザーの表示について。

atan2関数で角度を求めているので、x軸の正の方向がAngle=0ですね。 これを試してみてください。 DrawModiGraph(lazer[l].x-sin(lazer[l].Angle)*lazer[l].haba/2, //x1 lazer[l].y+cos(lazer[l].Angle)*lazer[l].haba/2,//y1 lazer[l].x+sin(lazer[l].Angle)*lazer[l].haba/2,//x2 ...
by djann
9年前
フォーラム: C言語何でも質問掲示板
トピック: ポリゴンに対する内外
返信数: 3
閲覧数: 2432

Re: ポリゴンに対する内外

... // ポリゴンに座標が含まれているか // 単純に // Pc.NextPositionからPosition[ 0 ]へのベクトル1 // Pc.NextPositionからPosition[ 1 ]へのベクトル2 // 以上の二つの二次元ベクトル間の角度を求めている。 TotalRad = atan2( (Position[ 0 ].x - Pc.NextPosition.x) * (Position[ 1 ].z - Pc.NextPosition.z) - (Position[ 0 ].z - Pc.NextPosition.z) * (Position[ 1 ].x - Pc.NextPosition.x), ...
by Rittai_3D
10年前
フォーラム: C言語何でも質問掲示板
トピック: 龍神録 自機狙いで特攻させる方法を教えてください
返信数: 4
閲覧数: 4142

Re: 龍神録 自機狙いで特攻させる方法を教えてください

RON さんが書きました:ありがとうございます。色々と試してみましたが、結構難しいです。
>>まず。角度と。移動成分をプレイヤー座標に向けるような処理をしましょう。
ここを具体的にどうすればいいかいまいち分かりません。
移動成分というのは移動スピードのことでしょう。自機に向かう敵の移動速度です。
角度は、敵の位置とプレイヤーの位置が分かればatan2()で求められます。
by Rittai_3D
10年前
フォーラム: C言語何でも質問掲示板
トピック: コマンドプロンプトでexeファイルが停止する
返信数: 3
閲覧数: 2409

Re: コマンドプロンプトでexeファイルが停止する

オフトピック
直接関係ないのでofftopicですが
atan2()に渡す引数が両方0だとまずいので、そこのチェックが必要だと思います。
by みけCAT
11年前
フォーラム: C言語何でも質問掲示板
トピック: 3D空間での透明度のある画像描画とZソートなど
返信数: 7
閲覧数: 4167

Re: 3D空間での透明度のある画像描画とZソートなど

カメラの向きとカメラ→弾の向きの余弦は、atan2、sin、cosを使用しなくても、以下の式で計算できるはずです。 (擬似コード:実装するときは成分ごとの計算か、ライブラリの関数を使用してください) vector cameraPos; // カメラの位置(代入済み) vector targetPos; // カメラが見ている位置(代入済み) vector shotPos; // 弾の位置(代入済み、shot[i].posに相当する) vector c2t=targetPos-cameraPos; ...
by しろしろ
12年前
フォーラム: C言語何でも質問掲示板
トピック: Processingについて
返信数: 2
閲覧数: 2273

Processingについて

... dy = others .y - y; float distance = sqrt(dx*dx + dy*dy); float minDist = others .diameter/2 + diameter/2; if (distance < minDist) { float angle = atan2(dy, dx); float targetX = x + cos(angle) * minDist; float targetY = y + sin(angle) * minDist; float ax = (targetX - others .x) * spring; float ...
by softya(ソフト屋)
12年前
フォーラム: C言語何でも質問掲示板
トピック: 自機と敵機の角度を取得するには
返信数: 3
閲覧数: 3296

Re: 自機と敵機の角度を取得するには

atan2はC言語の標準ライブラリです。
「BohYoh.com【C言語講座】標準ライブラリ atan2
http://www.bohyoh.com/CandCPP/C/Library/atan2.html

数学的な意味はバグさんの書かれたとおりです。アークタンジェント(逆tan)をベースにした関数です。
by milgy
12年前
フォーラム: C言語何でも質問掲示板
トピック: 自機と敵機の角度を取得するには
返信数: 3
閲覧数: 3296

自機と敵機の角度を取得するには

... 龍神録プログラミングの館の13章「敵にショットを撃たせてみよう」には --- shot.cpp を以下のように記述 --- #include "../include/GV.h" //n番目のショットを登録した敵と自機との角度を返す double shotatan2(int n){ return atan2(ch.y-enemy[shot[n].num].y,ch.x-enemy[shot[n].num].x); } と書いてあり(長いので該当部分のみ抜粋)、 自分の求めている仕事をする関数はdouble atan2(Y方向の自機と敵機の距離,X方向の自機と敵機の距離);だろうと思うのですが、 ...
by ソーン
12年前
フォーラム: C言語何でも質問掲示板
トピック: 飛行機の水平器の計算について
返信数: 35
閲覧数: 9560

Re: 飛行機の水平器の計算について

出来ました。

roll=-atan2(AxisX.y, AxisY.y) です。こんどこそあってるはず。
計算式をアップしました。とはいっても3Dの行列変換を知っていないと難しいと思いますが。
これを機に勉強されてみては。

当然の注意点ですが、真上を向いているときは無理です。式でもゼロ除算となっているのがわかると思います。

http://www1.axfc.net/uploader/so/2982810
by ソーン
12年前
フォーラム: C言語何でも質問掲示板
トピック: 飛行機の水平器の計算について
返信数: 35
閲覧数: 9560

Re: 飛行機の水平器の計算について

追記:

atan2はatanを使いやすくしたものです。atan(y/x)だと 0 ~ 90 と -90 ~ -180 の区別が付かないので、atan2(y, x) でその辺も含めて計算してくれます。
hypot(x, y)はsqrt(x*x, y*y)です。距離の判定に便利です。(本当は比較先を二乗した方が高速なのかもしれないけど、大した差はないだろう)
by 珈琲
12年前
フォーラム: C言語何でも質問掲示板
トピック: 飛行機の水平器の計算について
返信数: 35
閲覧数: 9560

Re: 飛行機の水平器の計算について

横から失礼します。 以前私がフライトシューティングを作った時は、ワールド座標での赤ベクトルの向きを計算し、-asin(red.y) で求めました。 実際に右手を突き出して体を傾けるとわかりやすいと思います。 90°の時が不安なら-atan2(y, hypot(x, y)) で。 珈琲さんの求めるものとは違うかもしれませんが参考までに。 ありがとうございます。 一応、色々試してみたのですが DrawFormatString(200,500,GetColor(255,50,50),"角度 = %f",-asin(DrawUIAircraftObject->AxisX.y)*2); ...
by softya(ソフト屋)
12年前
フォーラム: C言語何でも質問掲示板
トピック: 飛行機の水平器の計算について
返信数: 35
閲覧数: 9560

Re: 飛行機の水平器の計算について

ソーン さんが書きました:横から失礼します。

以前私がフライトシューティングを作った時は、ワールド座標での赤ベクトルの向きを計算し、-asin(red.y) で求めました。
実際に右手を突き出して体を傾けるとわかりやすいと思います。
90°の時が不安なら-atan2(y, hypot(x, y)) で。

珈琲さんの求めるものとは違うかもしれませんが参考までに。
実際に作った人の意見のほうが参考になると思います。
私も時間を掛けて実験すれば良い方法も思いつくんでしょうが、時間が取れなくて難しい状況です。
by ソーン
12年前
フォーラム: C言語何でも質問掲示板
トピック: 飛行機の水平器の計算について
返信数: 35
閲覧数: 9560

Re: 飛行機の水平器の計算について

横から失礼します。

以前私がフライトシューティングを作った時は、ワールド座標での赤ベクトルの向きを計算し、-asin(red.y) で求めました。
実際に右手を突き出して体を傾けるとわかりやすいと思います。
90°の時が不安なら-atan2(y, hypot(x, y)) で。

珈琲さんの求めるものとは違うかもしれませんが参考までに。
by tlnlniri
12年前
フォーラム: C言語何でも質問掲示板
トピック: waveファイルからノイズを減らす方法について
返信数: 3
閲覧数: 2365

Re: waveファイルからノイズを減らす方法について

既に解決されているのに書きこんでいいのかわかりませんが、ノイズサプレッサについて。
どこか間違っていたらすみません。

音声データ読み込み

ハニング窓を掛ける

FFT

振幅スペクトルと位相スペクトルを計算

振幅スペクトルから任意の数値(一定)を引く
(振幅スペクトルが負になったら0にする)

振幅スペクトルと位相スペクトルから実部・虚部を計算

IFFT

50%オーバーラップ

振幅 = sqrt(実部 * 実部 + 虚部 * 虚部);
位相 = atan2(虚部, 実部);
実部 = 振幅 * cos(位相);
虚部 = 振幅 * sin(位相);
by b・t
12年前
フォーラム: C言語何でも質問掲示板
トピック: 3D版ホーミングミサイル
返信数: 1
閲覧数: 1273

3D版ホーミングミサイル

... Position ) ;//移動ベクトルを求める TargetMoveDirection=VNorm( MoveVec ) ;// 移動ベクトルを正規化したものをプレイヤーが向くべき方向として保存 // 目標の方向ベクトルから角度値を算出する TargetAngle = atan2( TargetMoveDirection.x, TargetMoveDirection.z ) ; // 目標の角度と現在の角度との差を割り出す // 最初は単純に引き算 SaAngle = TargetAngle - Angle ; // ある方向からある方向の差が180度以上になることは無いので ...
by bruu 
12年前
フォーラム: C言語何でも質問掲示板
トピック: 敵の体力について
返信数: 7
閲覧数: 2019

Re: 敵の体力について

... EnemyShot .EnemyShots[0].flag=1; EnemyShot .EnemyShots[0].x=EnemyShot .mem_ex; EnemyShot .EnemyShots[0].y=EnemyShot .mem_ey; EnemyShot .Angle[0] = atan2(EnemyShot .mem_py-EnemyShot .mem_ey,EnemyShot .mem_px-EnemyShot[i].mem_ex); PlaySoundMem(sound_enemy_shot[0],DX_PLAYTYPE_BACK); } EnemyShot[i].EnemyShots[0].x+=PATTERN1SPEED*cos(EnemyShot[i].Angle[0]); ...
by ulllllllr
12年前
フォーラム: C言語何でも質問掲示板
トピック: 逆三角関数等々。。。
返信数: 10
閲覧数: 4525

Re: 逆三角関数等々。。。

atan2 に換えてみたところ、いつものようなエラーが起きなくなりました! ありがとうございます! 変えた部分は、AngleOut 内部のみです。 double AngleOut( double x, double y //// それぞれ底辺、垂直線 //// ){ double r; //// 角度 格納用 //// r = atan2( y, x ) * ( 180.0 / 3.14159265358979 ); //// atan()でタンジェントからラジアンを出し、さらにラジアンを角度に変えて、r ...
by ulllllllr
12年前
フォーラム: C言語何でも質問掲示板
トピック: 逆三角関数等々。。。
返信数: 10
閲覧数: 4525

Re: 逆三角関数等々。。。

... 焦っていたもので、つい読み飛ばしてしまっていたようです。 ご指摘ありがとうございます。ただいま、知恵袋の  http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1297835247  のほうでも、お礼とリンクを張ってきました。 atan2 を使用しない理由ですが、ほかのプロジェクトで試しに使ってみた際、上手くいかなかったので、使用していません。 おそらく、自分の使い方がおかしかったのでしょうが、時間が惜しかったため、上手くいった、 atan を使っています。 コードタグも、すっかり忘れていました。申し訳ないです。 もう一度、コードタグをつけて、コードをあげたほうがいいでしょうか? ...
by Hanchan
13年前
フォーラム: C言語何でも質問掲示板
トピック: 龍神録13章について質問~ ヘルプ~
返信数: 14
閲覧数: 4750

龍神録13章について質問~ ヘルプ~

... に以下を追加 --- extern void shot_bullet_H000(int); void (*shot_bullet[SHOT_KND_MAX])(int) ={ shot_bullet_H000, }; //n番目のショットを登録した敵と自機との角度を返す double shotatan2(int n){ return atan2(ch.y-enemy[shot[n].num].y,ch.x-enemy[shot[n].num].x); } //空いている弾を探す int shot_search(int n){ int i; for(i=0;i<SHOT_BULLET_MAX;i++){ ...
by LisetteLander
13年前
フォーラム: C言語何でも質問掲示板
トピック: 一周した時の(double)角度について
返信数: 20
閲覧数: 12665

Re: 一周した時の(double)角度について

if(fabs(Angle - atan2(-(double)(HungUnitCharacter.GetPosY()-PosY),(double)(HungUnitCharacter.GetPosX()-PosX)))<PI/2){}


(現在の角度-○への角度)の絶対値がPI/2以下の時
180度(-180度)をまたがない状態で綺麗に表現できる条件分岐だと思います。
しかし180度を跨ぐとNo:6の画像みたいに判定してくれなくなります。


また、言うのが遅れましたが角度は0~PI*2 ではなく-PI~PIを使いたいです。
by tk-xleader
13年前
フォーラム: C言語何でも質問掲示板
トピック: 一周した時の(double)角度について
返信数: 20
閲覧数: 12665

Re: 一周した時の(double)角度について

... while(Angle < 0){ Angle += PI*2; } } まぁ、if文はなくてもいいんですけどね。ところで、fmod関数を使う場合、先に差の絶対値を取ったほうが良かったようです。ですから、次のコードだとうまく動くかもしれません。 if(fmod(fabs(Angle - atan2((double)(HungUnitCharacter .GetPosY()-PosY),(double)(HungUnitCharacter .GetPosX()-PosX))),PI*2)) < PI/2)………
by ぱにしん
13年前
フォーラム: C言語何でも質問掲示板
トピック: DXlibのatan2
返信数: 2
閲覧数: 2729

Re: DXlibのatan2

つまり、どこの角度が返されるか、ってことですよね? angle=atan2(b.y-a.y,b.x-a.x)の場合・・・ 例えば線分ABを引いたとして、Aを通りXに平行な直線と線分ABが成す角の鋭い方が(恐らく)返されます。 angle=atan2(a.y-b.y,a.x-b.x)の場合・・・ 同じく線分ABを引いたとして、Bを通りXに平行な直線と線分ABが成す角度が(恐らく)返されます。 特にBの方が自信ないのですが・・・ やっぱり間違ってたみたいですね(汗 ご自身でコードを書かれて値がどういう変化を見せるか見てみるのも良いかもしれません。 ...
by ヒューガ
13年前
フォーラム: C言語何でも質問掲示板
トピック: DXlibのatan2
返信数: 2
閲覧数: 2729

DXlibのatan2

画像
このような状態で
angle=atan2(b.y-a.y,b.x-a.x);
とした場合angleにはどこの数値がはいるのでしょうか?また
angle=atan2(a.y-b.y,a.x-b.x);
の場合も教えてください。
by nil
13年前
フォーラム: C言語何でも質問掲示板
トピック: N-WAY弾を一括処理してくれるセクション
返信数: 7
閲覧数: 3412

Re: N-WAY弾を一括処理してくれるセクション

非常に適当かつ雑更にわかりにくい図で申し訳ないんですが、 弾の間の角度をang、弾数をwayとした場合、 敵と自機の成す角度 atan2( px-ex, py-ey )と一番外側の弾の間の角度は ( way-1 )*ang/2 になります ですので、コードとしては double EtoP = atan2( px-ex, py-ey ); for( int i=0; i<way; i++ ){ 弾の角度 = EtoP-( way-1 )*ang/2+i*ang; } となります……なるはずです 動作確認はしていませんし、最適化の余地もあります。 ...
by 6,28
13年前
フォーラム: C言語何でも質問掲示板
トピック: N-WAY弾を一括処理してくれるセクション
返信数: 7
閲覧数: 3412

N-WAY弾を一括処理してくれるセクション

... tama .tama_flag=1;//弾のフラグON tama .tama_x=enemy[temp].enemy_x;//親のX座標を代入 tama .tama_y=enemy[temp].enemy_y;//親のY座標を代入 double shotatan2=atan2(chara_y+20-tama .tama_y,chara_x+14-tama .tama_x);//弾と自機の角度 - このサイトお馴染みのshotatan2です tama .tama_angle=PI2/20/2+PI2/20*kazu*shotatan2;//弾の飛ぶ角度がおかしいのは、多分ここのせい。しかしどう書けばよいのかがわかりません。 ...
by KEYONN_
14年前
フォーラム: C言語何でも質問掲示板
トピック: atan2のテーブル化について(NESASM用)
返信数: 12
閲覧数: 8491

Re: atan2のテーブル化について(NESASM用)

h2so5 さんが書きました:マクロを展開すると16行目は下のような式になりますが、意図した通りですか?

ATN[x][y]=((int)(atan2(y,x)/3.141592653/256));
今、書籍で確認したところ、ラジアンから角度に直すには
度数=ラジアン÷180*PI;
みたいです。
どうやら間違ってたみたいです。

ただ、この場合、256周期で持ちたいので、その辺はどうなるのかは
よく分かりません。
by h2so5
14年前
フォーラム: C言語何でも質問掲示板
トピック: atan2のテーブル化について(NESASM用)
返信数: 12
閲覧数: 8491

Re: atan2のテーブル化について(NESASM用)

マクロを展開すると16行目は下のような式になりますが、意図した通りですか?

ATN[x][y]=((int)(atan2(y,x)/3.141592653/256));
by softya(ソフト屋)
14年前
フォーラム: C言語何でも質問掲示板
トピック: マリオが甲羅を蹴飛ばす処理
返信数: 19
閲覧数: 5733

Re: マリオが甲羅を蹴飛ばす処理

... 180度でyがマイナス方向なので画面方向で上。 270度でxがマイナス方向なので画面方向で左。 となりますので、36度だと下ちょい右方向へ移動します。 衝突の場所の反対方向に飛ばすには、衝突したマリオと甲羅のX,Yの相対座標でマリオに対する甲羅の角度を求めます。 使う関数はatan2です。これも三角関数ですね。 高校レベルの数学ですが使い方さえ覚えれば大丈夫です。 angle = atan2( 甲羅X-マリオX,甲羅Y-マリオY) でマリオから見た甲羅の角度が求まりますので、これを甲羅の移動方向に使ってください。
by rink
14年前
フォーラム: C言語何でも質問掲示板
トピック: 移動に関して
返信数: 4
閲覧数: 1937

移動に関して

... //移動後の座標を算出 pc.pos = VAdd(pc.pos, MoveVec); //プレイヤーのモデルの座標を更新する MV1SetPosition(pc.model_handle, pc.pos); //目標の方向ベクトルから角度値を算出する pc.rot = atan2(pc.angle.x, pc.angle.z); //モデルの角度を更新 MV1SetRotationXYZ( pc.model_handle, VGet( 0.0f, pc.rot + PHI_F, 0.0f)); cam.target_pos = VAdd(pc.pos, VGet( ...
by chalaza
14年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体テンプレートで座標データを使って画面スクロール
返信数: 16
閲覧数: 7665

Re: 構造体テンプレートで座標データを使って画面スクロール

#include <math.h>を追加してアークタンジェントを使えるようにして計算を組んだつもりなのですが… atan2を使おうとしたときだけ、『オーバーロードされた関数"atan2"の複数のインスタンスが引数リストと一致します。』と言われて エラーになってしまうのですが、これは座標指定の仕方がいけないのでしょうか… void HomingScroll(){ if(Turn==1){ //ターンが0から1になったら if(CameraX != PlayerData[1].DrawX && CameraY ...
by GRAM
14年前
フォーラム: C言語何でも質問掲示板
トピック: 直角三角形の鋭角を求めたい
返信数: 5
閲覧数: 2901

Re: 直角三角形の鋭角を求めたい

三角関数の逆関数を使えば解決すると思います。
この場合ならatanもしくはより便利なatan2を使えばよいかと。
double atan2(double y, double x);
でラジアンが求まります。
by たいちう
14年前
フォーラム: C言語何でも質問掲示板
トピック: sin, cos の値がわかっている状態での角度のもとめかた
返信数: 12
閲覧数: 11329

Re: sin, cos の値がわかっている状態での角度のもとめかた

> aとbのどちらも0のとき0を返すのはVisual C++仕様ですよ。
> aとbのどちらも0のとき返す値は処理系定義です。

私の貼ったリンク先は、単にVC++の場合(VS2010)ですね。
http://www.bohyoh.com/CandCPP/C/Library/atan2.html
確かに↑を見ると、処理系依存のように書かれていました。

私の書いた「正確な仕様を確認しましょう。」は、
次のように書いた方が良かったですね。
ご指摘ありがとうございました。

「処理系毎の正確な仕様を確認しましょう。
例えば最新のVC++では、次のように定義されています。」
by box
14年前
フォーラム: C言語何でも質問掲示板
トピック: sin, cos の値がわかっている状態での角度のもとめかた
返信数: 12
閲覧数: 11329

Re: sin, cos の値がわかっている状態での角度のもとめかた

aの値が0のとき、すなわち直線がy軸に平行なとき、atan2()の実行に失敗するかもしれません。
変数minの存在意義がちょっとわかりません。
by dic
14年前
フォーラム: C言語何でも質問掲示板
トピック: sin, cos の値がわかっている状態での角度のもとめかた
返信数: 12
閲覧数: 11329

Re: sin, cos の値がわかっている状態での角度のもとめかた

>>GRAMさん acos, asin の関数の存在は知っていたのですが、どのような処理をするか知りました それぞれ、cos, sin から ラジアン角度を出すのですね 今回は atan2関数で導きだせました ソースは・・・みたい人だけみていってください static vector<double> m_vTan; // テーブルの作成 int i; double pi, a; pi = 3.1415926535; a = pi / 180; for( i=0; i<180; i++ ) m_vTan.push_back( (-a)*i ...
by h2so5
14年前
フォーラム: C言語何でも質問掲示板
トピック: sin, cos の値がわかっている状態での角度のもとめかた
返信数: 12
閲覧数: 11329

Re: sin, cos の値がわかっている状態での角度のもとめかた

atan2(b,a) で角度が出ます。
sin cosを求める必要はありません。
by 奥兵
14年前
フォーラム: C言語何でも質問掲示板
トピック: 自機を敵に向けるプログラムについて
返信数: 3
閲覧数: 2027

自機を敵に向けるプログラムについて

... ) == 1 ){ mainuni->x=mainuni->x+3; } } if((mainuni->y>-30)){ if( CheckHitKey( KEY_INPUT_W ) == 1 ){ mainuni->y=mainuni->y-3; } } mainuni->rad=atan2(ene->y-mainuni->y,ene->x-mainuni->x); DrawRotaGraph(mainuni->x, mainuni->y,1.0,mainuni->rad+PI/2, mainuni->image[0], TRUE ); //エラーはここを指しています   ...
by Dixq (管理人)
14年前
フォーラム: C言語何でも質問掲示板
トピック: マウスの方向を向くプログラム
返信数: 9
閲覧数: 6462

Re: マウスの方向を向くプログラム

... メッセージ処理, 画面クリア) while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){ GetMousePoint( &x, &y ); // マウスの座標を取得 angle = (float)atan2( y-240., x-320. ); // 中心点とマウスの座標から角度を計算 DrawRotaGraph( 320 ,240, 1.0, angle, Handle, TRUE ); //描画 } DxLib_End(); // DXライブラリ終了処理 return 0; } 実行結果 ...
by h2so5
14年前
フォーラム: C言語何でも質問掲示板
トピック: マウスの方向を向くプログラム
返信数: 9
閲覧数: 6462

Re: マウスの方向を向くプログラム

C標準の数学関数としては atan や atan2 を使用することで、
マウス座標の差から角度を求めることができます。
by LisetteLander
15年前
フォーラム: C言語何でも質問掲示板
トピック: 本編のオプションのホーミング弾の誘導について2
返信数: 15
閲覧数: 3596

Re:本編のオプションのホーミング弾の誘導について2

l_a = (2*PI)/(5*60); //一定の角度(曲がる) l_b = atan2(y,x) - cshot[k].angle; //敵への角度-弾の角度 if(cos(l_b) > cos(l_a)){ //もしも「弾の進行方向と敵への角度の差」が「曲がる角度」より大きかったら cshot[k].angle=atan2(y,x); //敵への角度を弾の角度へ代入 }else if(sin(l_b)>0){ //弾の正面ではなく右寄りならば cshot[k].angle ...
by LisetteLander
15年前
フォーラム: C言語何でも質問掲示板
トピック: 本編のオプションのホーミング弾の誘導について2
返信数: 15
閲覧数: 3596

Re:本編のオプションのホーミング弾の誘導について2

b = atan2(y,x) - cshot[k].angle; if(cos(b) > cos(2*PI/5*360)){ cshot[k].angle=atan2(y,x); }else if(sin(b)>0){ cshot[k].angle += cos(2*PI/5*360); }else if(sin(b)<0){ cshot[k].angle -= cos(2*PI/5*360); }else{ cshot[k].angle=atan2(y,x); ...
by Tatu
15年前
フォーラム: C言語何でも質問掲示板
トピック: 本編のオプションのホーミング弾の誘導について2
返信数: 15
閲覧数: 3596

Re:本編のオプションのホーミング弾の誘導について2

... 2πラジアン=360° πラジアン=180° π/2ラジアン=90° π/3ラジアン=60° π/4ラジアン=45° π/6ラジアン=30° とそれらの角度での三角比(sin,cos,tan) ぐらいは覚えておいたほうがよいでしょう。 緩やかにホーミングさせる方法 弾から敵への方向はatan2(enemy.y-bullet.y,enemy.x-bullet.x)のように求めることができます。 そして、弾の進行方向はbullet.angleでわかります。そこで、これらの差をd = atan2(略) - bullet.angle、 また、曲がる角度をαとしてcos(d) > cos(α)のとき、弾の角度をatan2()と同じにする。 ...
by ISLe
15年前
フォーラム: C言語何でも質問掲示板
トピック: 本編のオプションのホーミング弾の誘導について
返信数: 5
閲覧数: 1439

Re:本編のオプションのホーミング弾の誘導について

> cshot[k].angle=atan2(y,x);

そのまま代入しないで、cshot[k].angleの元の値とatan2(y,x)の値を比較して回転方向(プラスマイナス)を求めて、一定値を加算(あるいは減算)すれば良いと思います。
(追記)一定値(の絶対値)が小さいほど大きな弧を描くことになります。

①の「既存の角度になったら直線に飛んでいく」の既存の角度というのがよく分からないですが、例えば弾にカウンタを追加して減算しつつ0になるまで誘導する、とすると一定時間追いかけるというふうにできます。
画像
by LisetteLander
15年前
フォーラム: C言語何でも質問掲示板
トピック: 本編のオプションのホーミング弾の誘導について
返信数: 5
閲覧数: 1439

本編のオプションのホーミング弾の誘導について

... if(boss.flag==0){ x=enemy[num].x-cshot[k].x; y=enemy[num].y-cshot[k].y; } else{ x=boss.x-cshot[k].x; y=boss.y-cshot[k].y; } cshot[k].angle=atan2(y,x); } } 本編のcshot.cからコピーしたものです。 このプログラムだと、たとえばボスがx=0,y=0にいて、弾の発射位置がx=1,y=1で 弾の発射方向(angle)が-y方向にしかないとしても、直線状にホーミングしてしまいます。 これを、なめらかに、例ていうと扇状に誘導していき、ボスのy軸を下回ったら ...
by C権化
15年前
フォーラム: C言語何でも質問掲示板
トピック: 無題
返信数: 19
閲覧数: 2712

Re:自機ショットのある焦点への集約

できました!!
本当に感謝です。

もしよろしければ、なぜ、atan2(x,y)のyとxを変えて、PIを
加えれば良いのかの理由を教えてください。

ヒントでもいいのでお願いします。 画像
by C権化
15年前
フォーラム: C言語何でも質問掲示板
トピック: 自機ショットのある焦点への集約
返信数: 7
閲覧数: 1235

Re:自機ショットのある焦点への集約

できました!!
本当に感謝です。

もしよろしければ、なぜ、atan2(x,y)のyとxを変えて、PIを
加えれば良いのかの理由を教えてください。

ヒントでもいいのでお願いします。 画像
by みけCAT
15年前
フォーラム: C言語何でも質問掲示板
トピック: 無題
返信数: 19
閲覧数: 2712

Re:自機ショットのある焦点への集約

試してはいません。 龍神録33章のboss_shot.cppを参考にしてみました。 cshotatan2関数をこのようにしたらどうなりますか? double cshotatan2(int k){ return atan2(cshot[k].y-(ch.y-100),cshot[k].x-ch.x); } または double cshotatan2(int k){ return atan2((ch.y-100)-cshot[k].y,ch.x-cshot[k].x); } 追記 龍神録33章のboss_shot.cppは下の関数に近い状態になっています。 ...
by みけCAT
15年前
フォーラム: C言語何でも質問掲示板
トピック: 自機ショットのある焦点への集約
返信数: 7
閲覧数: 1235

Re:自機ショットのある焦点への集約

試してはいません。 龍神録33章のboss_shot.cppを参考にしてみました。 cshotatan2関数をこのようにしたらどうなりますか? double cshotatan2(int k){ return atan2(cshot[k].y-(ch.y-100),cshot[k].x-ch.x); } または double cshotatan2(int k){ return atan2((ch.y-100)-cshot[k].y,ch.x-cshot[k].x); } 追記 龍神録33章のboss_shot.cppは下の関数に近い状態になっています。 ...
by C権化
15年前
フォーラム: C言語何でも質問掲示板
トピック: 無題
返信数: 19
閲覧数: 2712

自機ショットのある焦点への集約

5発、自機の周りからショットを出し、 (自機のx座標,自機のy座標から-100)の座標めがけて 集約したいと考え、 double cshotatan2(int k){ return atan2(cshot[k].x-ch.x,cshot[k].y-(ch.y-100)); } void ch_pattern_Nomal(){ int k; for(int i=0;i<cshot0num[ch.power<200?0:1];i++){ if((k=search_cshot())!=-1){ cshot[k].flag=1; ...
by C権化
15年前
フォーラム: C言語何でも質問掲示板
トピック: 自機ショットのある焦点への集約
返信数: 7
閲覧数: 1235

自機ショットのある焦点への集約

5発、自機の周りからショットを出し、 (自機のx座標,自機のy座標から-100)の座標めがけて 集約したいと考え、 double cshotatan2(int k){ return atan2(cshot[k].x-ch.x,cshot[k].y-(ch.y-100)); } void ch_pattern_Nomal(){ int k; for(int i=0;i<cshot0num[ch.power<200?0:1];i++){ if((k=search_cshot())!=-1){ cshot[k].flag=1; ...
by きつね
15年前
フォーラム: C言語何でも質問掲示板
トピック: 龍神録を参考にしたゲーム公開しました【雑談?】
返信数: 25
閲覧数: 2997

Re:キャラにそれぞれ番号を登録する

... //目的y座標 sbx=c->sx-c->bx; //x座標の差 sby=c->sy-c->by; //y座標の差 c->Spd=2.0; //移動速度 c->Sb=sqrt(sbx*sbx+sby*sby); //移動距離 c->ex=0; c->ey=0; //初期化 c->Ang=atan2(sby,sbx); //角度 c->Esx=sbx/c->Sb*c->Spd; //x方向への移動速度 c->Esy=sby/c->Sb*c->Spd; //y方向への移動速度 c->range=20.0; //当たり判定の大きさ c->hit_x=cos(c->Ang)*40; c->hit_y=sin(c->Ang)*40; ...
by softya
15年前
フォーラム: C言語何でも質問掲示板
トピック: 龍神録を参考にしたゲーム公開しました【雑談?】
返信数: 25
閲覧数: 2997

Re:キャラにそれぞれ番号を登録する

... //目的y座標 sbx=c->sx-c->bx; //x座標の差 sby=c->sy-c->by; //y座標の差 c->Spd=2.0; //移動速度 c->Sb=sqrt(sbx*sbx+sby*sby); //移動距離 c->ex=0; c->ey=0; //初期化 c->Ang=atan2(sby,sbx); //角度 c->Esx=sbx/c->Sb*c->Spd; //x方向への移動速度 c->Esy=sby/c->Sb*c->Spd; //y方向への移動速度 c->range=20.0; //当たり判定の大きさ } void CalcMove(Ch_t *c){ ...
by きつね
15年前
フォーラム: C言語何でも質問掲示板
トピック: 龍神録を参考にしたゲーム公開しました【雑談?】
返信数: 25
閲覧数: 2997

Re:キャラにそれぞれ番号を登録する

... ->sx-c ->bx; //x座標の差 sby=c ->sy-c ->by; //y座標の差 c ->Spd=2.0; //移動速度 c ->Sb=sqrt(sbx*sbx+sby*sby); //移動距離 c[i]->ex=0; c[i]->ey=0; //初期化 c[i]->Ang=atan2(sby,sbx); //角度 c[i]->Esx=sbx/c[i]->Sb*c[i]->Spd; //x方向への移動速度 c[i]->Esy=sby/c[i]->Sb*c[i]->Spd; //y方向への移動速度 c[i]->range=20.0; //当たり判定の大きさ } void ...
by きつね
15年前
フォーラム: C言語何でも質問掲示板
トピック: 龍神録を参考にしたゲーム公開しました【雑談?】
返信数: 25
閲覧数: 2997

キャラにそれぞれ番号を登録する

... ->sx-c ->bx; //x座標の差 sby=c ->sy-c ->by; //y座標の差 c ->Spd=2.0; //移動速度 c ->Sb=sqrt(sbx*sbx+sby*sby); //移動距離 c[i]->ex=0; c[i]->ey=0; //初期化 c[i]->Ang=atan2(sby,sbx); //角度 c[i]->Esx=sbx/c[i]->Sb*c[i]->Spd; //x方向への移動速度 c[i]->Esy=sby/c[i]->Sb*c[i]->Spd; //y方向への移動速度 c[i]->range=20.0; //当たり判定の大きさ } } void ...
by 霜焼け
15年前
フォーラム: C言語何でも質問掲示板
トピック: 2点間の距離の角度を求めたい
返信数: 13
閲覧数: 3382

Re:2点間の距離の角度を求めたい

まず、atan2関数の引数は(y軸方向の移動量,x軸方向の移動量)です。
なので、この場合はatan2(dy,dx)としなければなりません。

/*
次に、 r=r*(180/M_PI);ではなく、 r=r*(M_PI/180);
1度はπ/180です。
*/
勘違いから嘘書いてしまいました。すみません。
r=r*(180/M_PI);のままで正しいです 画像
by ラッド
15年前
フォーラム: C言語何でも質問掲示板
トピック: 2点間の距離の角度を求めたい
返信数: 13
閲覧数: 3382

2点間の距離の角度を求めたい

2点間の距離の角度を求めたいのですが上手くいきません・・・。

int dx = x1 - x2;
int dy = y1 - y2;

float r = atan2( dx, dy ); // ←-1~1で返ってくる
r = r * (180/M_PI);

これを0~360にしたいです。
by 真紅
15年前
フォーラム: C言語何でも質問掲示板
トピック: 13章が上手くいかないのですが・・・
返信数: 3
閲覧数: 887

13章が上手くいかないのですが・・・

... extern void shot_bullet_H000(int); void (*shot_bullet[SHOT_KND_MAX])(int) ={ shot_bullet_H000, }; //n番目のショットを登録した敵と自機との角度を返す double shotatan2(int n){ return atan2(ch.y-enemy[shot[n].num].y,ch.x-enemy[shot[n].num].x); } //空いている弾を探す int shot_search(int n){ int i; for(i=0;i<SHOT_BULLET_MAX;i++){ ...
by みけCAT
15年前
フォーラム: C言語何でも質問掲示板
トピック: 自機と敵機の角度
返信数: 10
閲覧数: 1452

Re:自機と敵機の角度

... r[10],sinsin[10],coscos[10];//ラジアン,サイン,コサイン というように要素を10しか確保していないのに、 for(i=0;i<50;i++){ if(tmain2.tflag ==0){ tmain2.tflag =1; //サインコサイン tmain2.r =atan2(jiki.ty-tmain2.ty,tmain2.tx-jiki.tx); tmain2.coscos =cos(tmain2.r ); tmain2.sinsin =sin(tmain2.r ); break; } } というようにそれより大きい要素にアクセスしているためデータが壊れていると思います。
by Ultimate
15年前
フォーラム: C言語何でも質問掲示板
トピック: 自機と敵機の角度
返信数: 10
閲覧数: 1452

Re:自機と敵機の角度

... tmain2.y =tmain2.ty; } } if(tmain2.count2>=10){ tmain2.count-0; for(i=0;i<50;i++){ if(tmain2.tflag ==0){ tmain2.tflag =1; //サインコサイン tmain2.r =atan2(jiki.ty-tmain2.ty,tmain2.tx-jiki.tx); tmain2.coscos =cos(tmain2.r ); tmain2.sinsin =sin(tmain2.r ); break; } } } for(i=0;i<50;i++){ if(tmain2.tflag[i]==1){ ...
by Ultimate
15年前
フォーラム: C言語何でも質問掲示板
トピック: 自機と敵機の角度
返信数: 10
閲覧数: 1452

自機と敵機の角度

弾幕を作っていて、敵に自機狙いショットを打たせたいのですが、下の部分に何かおかしい点があるようです。

どこが間違えているのでしょうか?

tmain2.r[/url]はラジアンを入れる変数です。
tmain2.coscos[/url]はコサインを入れる変数
tmain2.sinsin[/url]はサインを入れる変数


tmain2.r=atan2(tmain2.ty-jiki.ty,tmain2.tx-jiki.tx);
tmain2.coscos=cos(tmain2.r);
tmain2.sinsin=sin(tmain2.r);
by きつね
15年前
フォーラム: C言語何でも質問掲示板
トピック: キャラを増やす
返信数: 3
閲覧数: 682

キャラを増やす

... agent=LoadGraph("char1.png"); //画像をメモリに読み込み agent1=LoadGraph("char1.png"); SB=0; //初期値 SB1=0; Ex=0; //初期値 Ex1=0; Ey=0; //初期値 Ey1=0; r=atan2(sbx,sby); //ラジアン r1=atan2(sbx,sby); while(1) { ClearDrawScreen(); //画面の初期化 Ex+=Esx; //EsxをExに代入 Ex1+=Esx1; Ey+=Esy; //EsyをEyに代入 Ey1+=Esy1; SB=sqrt(Ex*Ex+(Ey)*(Ey)); ...
by polpol
15年前
フォーラム: C言語何でも質問掲示板
トピック: 龍神録の13章で
返信数: 2
閲覧数: 533

龍神録の13章で

... shot[j].num=i;//num=どの敵から発射されたものか。 shot[j].cnt=0; return ; } } //n番目のショットを登録した敵と自機との角度を返す extern int PlayerX, PlayerY; double shotatan2(int n); double shotatan2(int n,int PlayerX,int PlayerY){ return atan2(PlayerY-enemy[shot[n].num].y,PlayerX-enemy[shot[n].num].x); } //空いている弾を探す ...
by NEX
15年前
フォーラム: C言語何でも質問掲示板
トピック: オブジェクトが滑る処理
返信数: 6
閲覧数: 794

Re:オブジェクトが滑る処理

... distance = sqrt( float((End.x - Start.x) * (End.x - Start.x) + (End.y - Start.y) * (End.y - Start.y)) ); if( distance>= 5){ Medal.Dir = (float)atan2( float(End.x-Start.x), float(End.y-Start.y)); Medal.Speed = -1 * float(touchCount/60) + 7; // ここの値 touchCount = 0; } } // 移動処理 Medal.Px += int(sin(Medal.Dir) ...
by NEX
15年前
フォーラム: C言語何でも質問掲示板
トピック: オブジェクトが滑る処理
返信数: 6
閲覧数: 794

Re:オブジェクトが滑る処理

... Mouse.plFlg ){ float distance = sqrt( float((End.x - Start.x) * (End.x - Start.x) + (End.y - Start.y) * (End.y - Start.y)) ); Medal.Dir = (float)atan2( float(End.x-Start.x), float(End.y-Start.y)); Medal.Speed = -1 * float(touchCount/60) + 7; // ここの値 touchCount = 0; } ↑に記載し忘れてしまいました。
by NEX
15年前
フォーラム: C言語何でも質問掲示板
トピック: オブジェクトが滑る処理
返信数: 6
閲覧数: 794

オブジェクトが滑る処理

... クリックしていた時間によって初速度が変わるようにしております。  ※早く離したらいっきに滑らすため 添付させて頂いたのがソースになります。 ソース内の下記で値を弄っております。 // 初速度の設定 if( Mouse.plFlg ){ Medal.Dir = (float)atan2( float(End.x-Start.x), float(End.y-Start.y)); Medal.Speed = -1 * float(touchCount/60) + 3; // ここの値 touchCount = 0; } // 移動処理 Medal.Px += int(sin(Medal.Dir) ...
by きつね
15年前
フォーラム: C言語何でも質問掲示板
トピック: 画像の移動
返信数: 8
閲覧数: 1590

Re:画像の移動

... Esx=sbx/sb*sokudo; //x方向の移動速度 Esy=sby/sb*sokudo; //y方向の移動速度 agent=LoadGraph("char1.png"); //画像をメモリに読み込み SB=0; //初期値 Ex=0; //初期値 Ey=0; //初期値 rad=atan2(sbx,sby); //ラジアン while(1) { ClearDrawScreen(); //画面の初期化 Ex+=Esx; //EsxをExに代入 Ey+=Esy; //EsyをEyに代入 SB=sqrt(Ex*Ex+(Ey)*(Ey)); //移動距離の計算 if(sb<SB) ...
by きつね
15年前
フォーラム: C言語何でも質問掲示板
トピック: 画像の移動
返信数: 8
閲覧数: 1590

Re:画像の移動

... //それぞれのx座標の差 sby=by-sy; //それぞれのy座標の差 sb=sqrt(sbx*sbx+sby*sby); //出発点と目的地の距離 Esx=sbx/sb*sokudo; //x方向の移動速度 Esy=sby/sb*sokudo; //y方向の移動速度   rad=atan2(sbx,sby); //ラジアン 引数によって変化する値の部分の計算をする [3] while(1) { ClearDrawScreen(); //画面の初期化 Ex+=Esx; //EsxをExに代入 Ey+=Esy; //EsyをEyに代入 SB=sqrt(Ex*Ex+(Ey)*(Ey)); ...
by きつね
15年前
フォーラム: C言語何でも質問掲示板
トピック: 画像の移動
返信数: 8
閲覧数: 1590

画像の移動

... Esy=sby/sb*sokudo; //y方向の移動速度 agent=LoadGraph("char1.png"); //画像をメモリに読み込み Cr=GetColor(255,255,255); //白の取得 SB=0; //初期値 Ex=0; //初期値 Ey=0; //初期値 rad=atan2(sbx,sby); //ラジアン while(sb>SB) //SBがsbになるまで繰り返す { ClearDrawScreen(); //画面の初期化 Ex+=Esx; //EsxをExに代入 Ey+=Esy; //EsyをEyに代入 SB=sqrt(Ex*Ex+(Ey)*(Ey)); ...
by めるぽん
15年前
フォーラム: C言語何でも質問掲示板
トピック: 当たり判定について
返信数: 154
閲覧数: 13364

Re:当たり判定について

>出来たら説明していただけないでしょうか。申し訳ないです。 どの辺が分からなかったのでしょうか。 1.その atan2 の使い方だと、(x1,y1) が必ず (x2,y2) の方向に進んでいるという計算になる 2.パラメータを追加した上で(x1,y1)の円だけでなく(x2,y2)も同時に動かす 3.atan2atan2(Y, X) のように Y 座標を先に指定する 4. ○↑ ↓○ という感じでお互いに微妙にずれて(でも物理的に考えれば当たる)移動しているときに、トンネリングが発生する可能性があります ...
by めるぽん
15年前
フォーラム: C言語何でも質問掲示板
トピック: 当たり判定について
返信数: 154
閲覧数: 13364

Re:当たり判定について

2つの円は必ずお互いに反対の方向に進んでいるわけではなく、ばらばらな方向へ移動してますよね? その atan2 の使い方だと、(x1,y1) が必ず (x2,y2) の方向に進んでいるという計算になる気がします。 パラメータにそれぞれの円が進む方向というパラメータが足りないので、そのパラメータを追加した上で、(x1,y1)の円だけでなく(x2,y2)も同時に動かす必要がありそうです。 あと atan2atan2(Y, X) のように Y 座標を先に指定するので、それも気をつける必要がありますね。 ...
by たろう
15年前
フォーラム: C言語何でも質問掲示板
トピック: 当たり判定について
返信数: 154
閲覧数: 13364

Re:当たり判定について

... rang2) { float r=rang1+CRANG; float r2=rang2+CRANG; if(spd1<0) spd1=-1*spd1; if(spd2<0) spd2=-1*spd2; if(spd1+spd2>r+r2){ double pre_x=x1+cos(atan2(x1-x2,y1-y2))*(spd1+spd2); double pre_y=y1+sin(atan2(x1-x2,y1-y2))*(spd1+spd2); double px,py; for(int j=0;j<(spd1+spd2)/(r+r2);j++){ px=pre_x-x2; ...
by KEN
15年前
フォーラム: C言語何でも質問掲示板
トピック: 三角関数をつかって移動処理をしているのですが、6パターンくらいの角度しかうごきません
返信数: 8
閲覧数: 881

Re:三角関数をつかって移動処理をしているのですが、6パターンくらいの角度しかうごきません

今自分も同じ事をしています
もし自分の思い違いでなければ
これで角度はでます

自分はアークタンジェントを使ってます

atan2( 物.y - 物.y, 物.x - 物.x );
by KEN
15年前
フォーラム: C言語何でも質問掲示板
トピック: 回転
返信数: 4
閲覧数: 652

回転

... D3DXVec2TransformCoord( &z , &z , &rotMat ); } //変換した値を戻す MoveMatrix( v, x1, y1, 0.0f ); void Dire() { //ここで角度を出す //自分の位置 - 敵の位置 tmpRad = atan2( A.y - Z.y, A.x - Z.x ); } 宜しくお願いします http://dixq.net/img/bbs/Henshu.png
by yamataka
15年前
フォーラム: C言語何でも質問掲示板
トピック: へにょりレーザー
返信数: 3
閲覧数: 1243

へにょりレーザー

... 1;i++){ if(x1 > 2)x1[i + 1] += 2; if(y1 > 1)y1[i + 1] += 1; if(x2 > 2)x2[i + 1] += 2; if(y2 > 1)y2[i + 1] += 1; } for(int i=0;i<256;i++){ angle = atan2(y1 - y2 ,x1 - x2 ); DrawModiGraph(before_x1 ,before_y1 ,before_x2[i],before_y2[i],x2[i] + img_width * cos(angle + PHI / 2),y2[i] + img_width * ...
by シエル
15年前
フォーラム: C言語何でも質問掲示板
トピック: 比例航法について
返信数: 13
閲覧数: 3023

Re:比例航法について

if(t==60){
e = atan2(terget.y-missile.y,terget.x-missile.x);
}
↑のようにeの値はt==60の時しか設定されないようになっています。
eの変数は自動変数なので、一度この関数から抜けると、消滅して値は消えてしまいます。
よってtの値が60以外の値だと、eに値がセットされないまま、↓の計算式が実行されエラーが出ていると思われます。

eF=e-F;//1ループ前の差分計算

ですので、eの変数はグローバル変数にするか、staticを付けて静的変数にするのが
いいと思われます。
by HY
15年前
フォーラム: C言語何でも質問掲示板
トピック: 比例航法について
返信数: 13
閲覧数: 3023

比例航法について

... i){ double f,F,fF,e,eF,FF; int t=missile .cnt;//ミサイルフラグが立った時t=0 if(t==0) missile .vy=2.0;//y方向への速度 if(t>=60){//60でなくともよい if(t==60){ e = atan2(terget.y-missile .y,terget.x-missile .x); } if(t>60){ f = atan2(terget.y-missile .y,terget.x-missile .x);//対象への角度を計測 F = atan2(missile .vy,missile ...
by Ultimate
15年前
フォーラム: C言語何でも質問掲示板
トピック: 三角関数で弾幕(2)
返信数: 25
閲覧数: 2562

Re:三角関数で弾幕(2)

atan2関数は初めて知りました。 http://www.orchid.co.jp/computer/cschool/CREF/atan2.html 「斜辺 * cosでx座標が、斜辺 * sinでy座標が求まります。斜辺はPATTERN1SPEEDでしたね。この値を座標に増やします。」 は sinとcosの値を順に10 倍,20倍,30倍・・・としていけば全方向ショットができますか? で予想が当たっていたことがわかりました。(つまり、斜辺を10倍・・・ということなので) ...
by Dixq (管理人)
15年前
フォーラム: C言語何でも質問掲示板
トピック: 龍神録の13章について
返信数: 11
閲覧数: 1026

Re:龍神録の13章について

いえ、atan2は -PI <= atan2(y,x) <= -PI の範囲だったと思います。 しかし、範囲がどうだろうと関係ないのです。 だって-PIとPIは同義なのですから、0と2PIも同じなのです。 この話はそんなに深く考えるようなものではなく、 ・角度は360°ごとに同じものになる ・龍神録のデフォルトの画像は-90°の向きを向いている ということから、計算結果+90°の向きを向かせて描画しているのです。 良く解らなければ弾の画像をペイントでも何でもいいので、90°回転させて上書き保存し、 ...

詳細検索ページへ移動する