// ■弦の振動のシミュレーション #include "myWin.h" #include "math.h" #define NUMELM 100 //要素数(点の数=要素数+1) #define DISPLAY 5000 //表示タイミング(5000回に1回表示) #define PI 3.14159265358979 double Z[2][NUMELM+1],V[2][NUMELM+1]; //各点の座標と速度(要素数+1個) int ID1, ID2; //現時刻と次時刻切替え用添字 double Alfa=0.05, DX=0.05, DT=0.001,Beta, myu=1; //解析用パラメータ static HDC hBuff; static HBITMAP hBM; //ビットマップ表示用 void initData(){ //■シミュレーション用初期設定 for(int i=0;i<=NUMELM/2;i++){ int j=NUMELM-i; Z[0][i]=Z[0][j]=sin(PI*(double)i/(double)NUMELM); V[0][i]=V[0][j]=0; } Beta=Alfa*Alfa/(DX*DX); ID1 = 0; ID2 = 1; } void drawLine(int X1, int Y1, int X2, int Y2, int color){ //■弦部分の直線 HPEN pen=CreatePen(PS_SOLID, 2, color); SelectObject(hBuff, pen); MoveToEx(hBuff,X1,Y1,NULL); LineTo(hBuff,X2,Y2); DeleteObject(pen); } void drawEllipse(int X1, int Y1, int X2, int Y2, int lColor, int bColor){//■端部の円形 HPEN pen=CreatePen(PS_SOLID, 1, lColor); SelectObject(hBuff, pen); HBRUSH brush=CreateSolidBrush(bColor); SelectObject(hBuff, brush); Ellipse(hBuff,X1,Y1, X2,Y2); DeleteObject(brush);DeleteObject(pen); } int dspX(int X){ return (int)((double)(X*DX*100+100));}//■表示用X座標 int dspY(double Y){ return (int)(Y*DX*1000+100);} //■表示用Y座標 void drawState(){ //■現状態の表示(描画本体) for(int i=0;i