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;
}