C言語関係掲示板

過去ログ

No649 斜方投射の計算

[戻る] [ホームページ]
No.7076

簡単な物理の計算なんですけど・・・
投稿者---hiro(2003/06/04 01:58:48)


斜方投射の計算を作ってみたのですが、結果が違ってしまいます。
とりあえずソースは
#include<iostream>
#include<cmath>
using namespace std;
main()
{
double x,y,z,t,g,v;
g=9.8;
scanf("%lf",&v);      
scanf("%lf",&z);      
scanf("%lf",&t);      
x=v*t*cos(z);        
y=v*t*sin(z)-(g*t*t)/2;   
printf("x=%d",x);
printf("y=%d",y);

x,y,z,v,tは距離、高さ、角度、初速度、時間をあらわしています。
自分は角度がおかしいと思い、以下のソースを考えました。
#include <iostream.h>
#include <math.h>
#define ENSHURITSU 3.141592
double radian(double deg);
main()
{
double deg;
cout << "角度は(度)"; cin >> deg;
double rad = radian(deg);
double s = sin(rad);
cout << "" << s << "" << endl;

double radian(double deg)
{
double rd;
rd = deg * ENSHURITSU / 180;
return rd;
}
これなら角度で値をだせたのですが、上のソースにzを変えて入れてもうまく結果が出せませんでした。
どうすればいいのでしょうか。

No.7078

Re:簡単な物理の計算なんですけど・・・
投稿者---YuO(2003/06/04 03:13:33)


> 斜方投射の計算を作ってみたのですが、結果が違ってしまいます。
> とりあえずソースは
#include<iostream>
#include<cmath>
using namespace std;
main()
{
        double x,y,z,t,g,v;
        g=9.8;
        scanf("%lf",&v);
        scanf("%lf",&z);
        scanf("%lf",&t);
        x=v*t*cos(z);
        y=v*t*sin(z)-(g*t*t)/2;
        printf("x=%d",x);
        printf("y=%d",y);
}


え〜っと,C++ですよね。
とりあえず,std::scanfとstd::printfは未定義です。
#処理系によってはiostreamがcstdioをインクルードするかもしれないが。
んでもって,main()という書き方も許されません。
#暗黙のintはC95まで。

で,一番の問題。
x, yの型はdoubleなのに,printfの書式指示子は%d,つまりintとなっています。
doubleの指示子である%fにするとよいでしょう。
でもって,zは当然ラジアンで入力,と。

つーか,C++使うならstd::cin/std::cout使った方が楽……。


とりあえず,Cで書き直すと,
#include <stdio.h>
#include <math.h>

/* 重力加速度 [ m/s/s ] */
#define g 9.8
 /* π */
#define pi 3.1415926536

int main (void)
{
    double t;    /* 経過時間 [ s ]   */
    double v;    /* 初速度   [ m/s ] */
    double x, y; /* 位置     [ m ]   */
    double z;    /* 投射角度 [ rad ] */

    printf("初速度, 投射角度(度), 経過時間");
    scanf("%lf, %lf, %lf", &v, &z, &t);
    z *= pi / 180.0; /* 度 → ラジアン変換 */

    x = v * cos(z) * t;
    y = v * sin(z) * t - g * pow(t, 2.0) / 2.0;

    printf("x = %f\ny = %f\n", x, y);
    return 0;
}

でよいかと。


No.7079

Re:簡単な物理の計算なんですけど・・・
投稿者---hiro(2003/06/04 06:48:33)


有難とうございます。
ラジアンや基本的なことが抜けていたようでした。
もっと勉強します。