二点間の角度

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

二点間の角度

#1

投稿記事 by 西村 » 17年前

 を、計算するプログラムを作る練習をしていたのですが、何故かしらコンパイラは通るのにいざ実行すると一つ目の座標のxを入力する段で『問題が発生したため終了します』とパソコンから言われて実行出来ません。これは僕のプログラムに欠陥があるからなのか、パソコンがおかしいのか、どちらなのでしょうか?とりあえず、以下がプログラムの内容です。
#include <stdio.h>
#include <math.h>

typedef struct{
  double  x;
  double  y;
}Pos;

int main(void){

  Pos  pos1,  pos2;
  double  ta, rad, dir;

  puts("座標を二つ入力してください");
  printf("X1:");  scanf("%lf", pos1.x);
  printf("Y1:");  scanf("%lf", pos1.y);
  printf("X2:");  scanf("%lf", pos2.x);
  printf("Y2:");  scanf("%lf", pos2.y);

  ta = sqrt((pos1.y - pos2.y) * (pos1.y - pos2.y)) / sqrt((pos1.x - pos2.x) * (pos1.x - pos2.x));
  rad = atan(ta);
  dir = rad / (3.14159265358979 * 180.0);

  printf("二点間の角度は%fです", dir);

  return(0);
}
 あと、角度の出し方自体も色々サイトを見ながら作ったのですが、不安なのでそちらのほうも出来ればお願いします。
 最近雷ばっかりでパソコンつけるの恐いです…

toyo

Re:二点間の角度

#2

投稿記事 by toyo » 17年前

scanfの引数はポインタになります。
scanf("%lf", pos1.x);

scanf("%lf", &pos1.x);
ですね
以下同様

御津凪

Re:二点間の角度

#3

投稿記事 by 御津凪 » 17年前

角度の出し方はたしか、
rad = atan2(pos2.y - pos1.y,pos2.x - pos1.x);
でも、角度が出せたかと思います。
(こちらの方が平方根を使わないので処理は早いはず)

box

Re:二点間の角度

#4

投稿記事 by box » 17年前

>   ta = sqrt((pos1.y - pos2.y) * (pos1.y - pos2.y)) / sqrt((pos1.x - pos2.x) * (pos1.x - pos2.x));

分子・分母とも、「2乗して平方根を計算」していますが、
意味がありますか?
単に、

    ta = (pos1.y - pos2.y) / (pos1.x - pos2.x);

ではダメでしょうか?
なお、分子がゼロ(つまり、2点のx座標が同じ)の場合を
考慮する必要があります。

toyo

Re:二点間の角度

#5

投稿記事 by toyo » 17年前

sqrt((pos1.y - pos2.y) * (pos1.y - pos2.y))

(pos1.y - pos2.y)
と同じ値になります。
dir = rad / (3.14159265358979 * 180.0);

dir = rad * 180.0 / 3.14159265358979;
です

toyo

Re:二点間の角度

#6

投稿記事 by toyo » 17年前

>sqrt((pos1.y - pos2.y) * (pos1.y - pos2.y))
>は
>(pos1.y - pos2.y)
>と同じ値になります。

同じじゃないですね
絶対値になります。

西村

Re:二点間の角度

#7

投稿記事 by 西村 » 17年前

 皆様素早い返答ありがとうございます。

> rad = atan2(pos2.y - pos1.y,pos2.x - pos1.x);

 知りませんでした…早速導入させていただきました。

> ta = (pos1.y - pos2.y) / (pos1.x - pos2.x);
> ではダメでしょうか?

 長さなので負にならないように…と考えたのですが、よくよく考えれば無意味ですね…

何にしろ、無事に出せるようになりました。ありがとうございました!

閉鎖

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