プロが教えるわが家の防犯対策術!

極座標を直交座標に変換するプログラムです。
ptor関数を使って作成するのですが、上手く実行できません。
度からradに変換の仕方も良く分かりません。
どこが間違っているのか教えてください。

#include <stdio.h>
#include <math.h>

#define PI 3.14159265358979323846

struct rect{
double x;
double y;
};

struct pole{
double r;
double theta;
};

double po2(double *x, double *y, double r, double theta )
{
double rad;
rad = theta ;
x = r * cos(rad);
y = r * sin(rad);
}

int main(void) {
double x, y;
double r, theta;

printf("r = ");
scanf("%lf",&r);
printf("theta = ");
scanf("%lf",&theta);

printf("(r:%f, theta:%f) => (x:%f, y:%f)\n", r, theta, x, y);

return(0);
}

A 回答 (3件)

コードを書く前に、やりたいことを紙に書く方がよいでしょう。


ちゃんと設計しないと、ちゃんとしたコードは書けません。
    • good
    • 0

> 度からradに変換の仕方も良く分かりません。


180 [degree] = PI [radian]
なので、180をPIにできるような数をかければ良いです。

> ptor関数を使って作成する
そんな関数は無いようなのですが。

> どこが間違っているのか教えてください。
関数po2内でポインタ型のx,yにdouble型を代入している。
関数po2はdoubleを返すはずなのにreturnがない。
関数po2がどこからも使われていないけどそれでいいの?

あと、struct rectやstruct poleも、
せっかく定義しているのに使われていませんがなぜ?
せっかくあるなら、こんな感じで使ってみては。
struct rect ptor(struct pole p){
  struct rect r;
  double rad = p.theta*PI/180.0; /*degree to radian*/
  r.x = p.r * cos(rad);
  r.y = p.r * sin(rad);
  return r;
}
    • good
    • 0

ラジアンの パイは 180度です


ここから考えると ラジアン = 度 * パイ / 180 といった関係が考えられます

rad = theta * PI / 180;
で変換できますよ
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!