codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> typedef struct{ double x; /** x座標 **/ double y; /** y座標 **/ } orth_coord_t; typedef struct { double r; /** 動径 **/ double theta; /** 偏角 **/ } pole_coord_t; double drand(void); pole_coord_t conv_polar(orth_coord_t *o); orth_coord_t conv_ortho(pole_coord_t *p); int main(void) { int i; orth_coord_t o; pole_coord_t p; srand((unsigned)time(NULL)); for (i = 0; i < 10; i++) { o.x = drand() * ((rand() > (int)RAND_MAX / 2) ? 1.0 : -1.0); o.y = drand() * ((rand() > (int)RAND_MAX / 2) ? 1.0 : -1.0); printf("x = %f, y = %f\n", o.x, o.y); p = conv_polar(&o); printf("r = %f, θ = %f\n", p.r, p.theta); o = conv_ortho(&p); printf("x = %f, y = %f\n\n", o.x, o.y); } return 0; } /* 0より大きい1未満の乱数 */ double drand(void) { return (double)rand() + 1.0 / ((double)RAND_MAX + 2.0); } pole_coord_t conv_polar(orth_coord_t *o) { pole_coord_t p; p.r = sqrt(o->x * o->x + o->y * o->y); p.theta = atan(o->y / o->x); /* 第2象限と第3象限にある場合 */ if (p.theta > M_PI / 2.0 && p.theta < M_PI * 1.5) p.theta = -p.theta; return p; } orth_coord_t conv_ortho(pole_coord_t *p) { orth_coord_t o; o.x = p->r * cos(p->theta); o.y = p->r * sin(p->theta); return o; }
Private
[
?
]
Run code
Submit