Edited at

[C言語] 斜方投射

More than 3 years have passed since last update.

GitHubでも公開中。


原点から初速度$v_0$(m/s)、角度$θ$(°)で投げた質点の運動を考える。空気抵抗は無視する。初速度と角度と時間を入力し、質点の位置$(x,y)$と速度の大きさ$v$を求める。

#include <stdio.h>

#include <math.h>
#include <stdlib.h>
#define g 9.80665

int main(void) {

double DetermineX(double v0, double rad, double t);
double DetermineY(double v0, double rad, double t);
double DetermineMag(double v0, double rad);

double x, y, v0, deg, rad, t, magnitude;

printf("初速度v0 (m/s)、角度θ(°)、時間tを入力して下さい。\n");
printf("v0 = ");
scanf("%lf", &v0);

printf("deg = ");
scanf("%lf", &deg);
rad = deg*(M_PI/180);

printf("t = ");
scanf("%lf", &t);

x = DetermineX(v0, rad, t);
y = DetermineY(v0, rad, t);
magnitude = DetermineMag(v0, rad);

printf("x=%f y=%f\n", x, y);
printf("magnitude=%f \n", magnitude);

return 0;
}

double DetermineX(double v0, double rad, double t) {
double x;

x = v0*cos(rad)*t;

return x;
}

double DetermineY(double v0, double rad, double t) {
double y;

y = v0*sin(rad)*t - (1/2)*g*t*t;

return y;
}

double DetermineMag(double v0, double rad) {
double magnitude, v;

v = sqrt( v0*v0*( sin(rad)*sin(rad) + cos(rad)*cos(rad) ) );
magnitude = abs(v);

return magnitude;
}


[追記 2015/05/30]

sin( ), cos( ) の引数はラジアンなので、ラジアンに変換する式を追加。