トップページ > 過去ログ > 記事閲覧
振り子の角度
名前:PNG人 日時: 2006/12/01 10:22

度々すみません。 振り子のように動く画像を表示させたいのですが、 DrawRotaGraph2( 120, 0, 55, 0, 1, Kakudo, Gazou, TRUE ) 上記のKakudoにどのような計算を入れればいいのでしょうか? 計算方法が高校のときの教科書を紛失したためわからなくなってしまいました。 角度は45度くらいで動く予定でいます。 何かと基本的なことばかりかもしれませんが、 よろしくお願いします。

Page: 1 |

Re: 振り子の角度 ( No.1 )
名前:管理人 日時:2006/12/01 14:53

 PNG人さんどうも、DXライブラリの管理人です。  振り子の計算方法は Wikipedia にありましたので、参考に されてみては如何でしょうか? 振幅運動 http://ja.wikipedia.org/wiki/%E6%8C%AF%E5%8B%95%E9%81%8B%E5%8B%95 (「振り子」という項目に振り子運動について載っています)  上記のページに書かれている式を参考に振り子が揺れる サンプルプログラムを組んでみましたので、宜しければご覧に なってみて下さい。(サンプル中の angle をちょっと変更すれば Kakudo として使えるかもしれません) #include "DxLib.h" #include "Math.h" #define PI 3.1415926535897932384626433832795 #define LENGTH 200 // 紐の長さ #define CLENGTH (LENGTH * 2 * PI) // 紐を伸ばして一周させた場合に出来る円の円周の長さ #define MASS 0.346 // ぶら下がっている物の質量 #define G 9.81 // 重力加速度 #define STX 320 // 振り子の軸のx座標 #define STY 100 // 振り子の軸のy座標 // WinMain関数 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { double x; // 紐を伸ばして一周させた場合に出来る円の線上の座標、0は紐が軸の真下に伸びた位置 double speed; // xの変化速度 double angle; int nx, ny; // ウインドウモードで起動 ChangeWindowMode( TRUE ); // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // 初期位置は軸の真下から左方向に45度傾いた位置 x = CLENGTH / 8.0; // 初期速度は0 speed = 0.0; SetDrawScreen( DX_SCREEN_BACK ); while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 ) { ClearDrawScreen(); // 公式に従って速度を加算 speed += -MASS * ( G / 60 ) * sin( x / LENGTH ); // 速度に従って円上の座標を変更 x += speed; // 軸を原点とした場合のぶら下がっている物の座標を算出 angle = x / LENGTH + PI / 2.0; nx = cos( angle ) * LENGTH; ny = sin( angle ) * LENGTH; // 紐とぶら下がっているものを描画 DrawLine( STX, STY, STX + nx, STY + ny, GetColor( 255,255,255 ) ); DrawCircle( STX + nx, STY + ny, 32, GetColor( 255,255,255 ), FALSE ); ScreenFlip(); } // DXライブラリの終了 DxLib_End(); // ソフトの終了 return 0; }
Re: 振り子の角度 ( No.2 )
名前:PNG人 日時:2006/12/04 09:45

返答が遅れ、申し訳ありません 管理人さまありがとうございます。 早速試して見ます

Page: 1 |