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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ラッド

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

#1

投稿記事 by ラッド » 14年前

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

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

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

これを0~360にしたいです。

box

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

#2

投稿記事 by box » 14年前

>// ←-1~1で返ってくる

本当ですか?

霜焼け

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

#3

投稿記事 by 霜焼け » 14年前

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

/*
次に、 r=r*(180/M_PI);ではなく、 r=r*(M_PI/180);
1度はπ/180です。
*/
勘違いから嘘書いてしまいました。すみません。
r=r*(180/M_PI);のままで正しいです 画像

box

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

#4

投稿記事 by box » 14年前

> なので、この場合はatan2(dy,dx)としなければなりません。

気がつきませんでしたね。

> 1度はπ/180です。

それはそうなんですが、atat2の結果(ラジアン)から度に変換したいのですから、

> 次に、 r=r*(180/M_PI);ではなく、 r=r*(M_PI/180);

これはおかしいでしょう。

霜焼け

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

#5

投稿記事 by 霜焼け » 14年前

すみません、妙に勘違いしてました。修正しておきます。

シエル

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

#6

投稿記事 by シエル » 14年前

r=r*(180/M_PI);

これはあってますね。

ラッド

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

#7

投稿記事 by ラッド » 14年前

皆様、色々とありがとうございます。
あれから色々と弄ってみたのですが動かしたいように動いてくれません。
わかりにくいと思いますのでやろうとしていることを書かせて頂きます。

OpenGL ES2.0(iPhone)で作っております。

隕石を惑星(目的地)にぶつけないように弾いていくといったゲームを作っております。
下記の仕様で作ってみてはいるのですが上手く動きません。

1、ランダムな位置に石が表示されます。
2、初期に設定されたTarget座標に向かって進みます。
3、Target座標を到達すると停止します。
4、オブジェクトにはタッチすることができ弾く?ことができ弾いた方向に飛んでいきます。

現在のソースでは指定した方向に進んでくれません。
どなたかお分かりになる方いらっしゃりませんでしょうか?

bool Flag; // 出現フラグ
int Rot; // 表示するときに使う角度
float Dir; // 移動する方向
int Mode; // 今回は関係ありません
int Px,Py,Ox,Oy; // 現在座標、前座標
bool touchFlag; // 一度でもタッチされたか →タッチされたら目的地ではなく弾かれた方向へ
int TargetX, TargetY; // 目的地
int width,height; // 今回は関係ありません。
void Init( bool Flag, int Mode, int Rot, int Px, int Py ); // 初期化
bool AreaOut(void); // 画面外にあるかの判定
bool Touch(void); // 触られているかの判定
void TouchObject(void); // 触られたらどんなことが起こるか
System.touchX; System.touchY; // タッチされている座標

一部、切り取ったソースを添付させて頂きます。

迷彩吹雪

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

#8

投稿記事 by 迷彩吹雪 » 14年前

はっきりと読み解いたわけではありませんが、static void Loop()内の
int dx = Storn.Ox - Storn.Ox;
これだとdxは常に0になりませんか?

ラッド

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

#9

投稿記事 by ラッド » 14年前

見ていてありがとうございます。
本当ですね・・・。間違えてました。
後、一か所間違えておりました。

Storn.Px += cos( Storn.Dir ) * STORN_SPEED;
Storn.Py += sin( Storn.Dir ) * STORN_SPEED;
  ↓
Storn.Px += cos( Storn.Dir*(M_PI/180) ) * STORN_SPEED;
Storn.Py += sin( Storn.Dir*(M_PI/180) ) * STORN_SPEED;

初期に指定した方向には行けるのですが
タッチ後に弾くような処理をすると-90という謎の値がDirに入っております。
タッチを離した時にのみ反応するフラグ(System.pulFlag)を作って
その時のみDirを変更するようにしてみたのですが
それでもDirに入っている値がおかしいです。

box

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

#10

投稿記事 by box » 14年前

> タッチ後に弾くような処理をすると-90という謎の値がDirに入っております。

x座標に変化がない、という判断を行なっているのではないでしょうか。

> タッチを離した時にのみ反応するフラグ(System.pulFlag)を作って
> その時のみDirを変更するようにしてみたのですが
> それでもDirに入っている値がおかしいです。

pulFlagというのは初登場ですね。
前に添付してあったコードにも見当たらないようです。
そのフラグをどんな風に使っているのでしょうか。


ところで、最初の投稿にあった、atan2の結果が-1~1の範囲である、
という判断の根拠はどこにありますか?

へろりくしょん

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

#11

投稿記事 by へろりくしょん » 14年前

添付されたコードは見てませんが。

そもそも、2点間の距離の角度というのは何でしょうか。
2点間の距離から角度を求めるのでしょうか。 よく分かりません。

角度を求めるには最低でも3つの頂点が必要です。


要求仕様を明確にすると、混乱も少ないかと。

通りすがりのプログラマ

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

#12

投稿記事 by 通りすがりのプログラマ » 14年前

こんなんでどうでしょうか。

while ( 1 )
{
if (r < 0) r += 360;
else if (r > 360) r -= 360;
else break;
}

ラッド

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

#13

投稿記事 by ラッド » 14年前

>>boxさん
添付したものにソースは書いておりません。
System.pulFlagというbool型の変数があり
タッチされ離された瞬間のみtrueになります。

>>ところで、最初の投稿にあった、atan2の結果が-1~1の範囲である、
>>という判断の根拠はどこにありますか?
すみません・・・どこかのURLでみたのですがその値が入るようなことが書いてあった気がします。
違っていたらすみません。



>>へろりさん
2点間の距離では分かりにくかったですね・・・。
A点からみてB点がどちらの方向にあるかを0~360で求めたいです。
真右にある場合は0といった感じです。



>>通りすがりのプログラマさん
Dir++等をしていないので本来なら0~360の値しか入らない気がします。
多分atan2の使い方が悪いのかと思うのですが・・・

閉鎖

“C言語何でも質問掲示板” へ戻る