// ■熱拡散方程式(Thermal Diffusion Equation) #include "myWin.h" #include "math.h" #define KX 100 //X方向有効要素数 #define KY 100 //Y方向有効要素数 #define DISPLAY 100 //表示タイミング(500回に1回表示) double T[2][KX+1][KY+1]; double U[KX+1][KY+1], V[KX+1][KY+1]; int ID1, ID2; //現時刻と次時刻切替え用添字 double DT, DX, DY, R1, R2,R3,R4, drawFlag; //解析用パラメータ static HDC hBuff; static HBITMAP hBM; //ビットマップ表示用 void initData(){ //■シミュレーション用初期設定 DT=0.00001; DX=1.0/KX;DY=1.0/KY; ID1=0; ID2=1; R1=2*DT/DX; R2=2*DT/DY; R3=DT/(DX*DX); R4=DT/(DY*DY); for(int j=0;j<=KY;j++) for(int i=0;i<=KX;i++){ T[ID1][i][j] = T[ID2][i][j]=0; double YY=DY*j; U[i][j] = 50 * YY * (1 - YY); V[i][j] = 0; } } void boundaryCondition(){ //■境界条件 for(int j=0;j<=KY;j++){ //左側冷却、 T[ID1][0][j]=0; T[ID1][KX][j]=T[ID1][KX-1][j]; //右側から熱流が流出 } for(int i=0;i<=KX; i++){ //上下冷却 T[ID1][i][0]=T[ID1][i][KY]=0; } for(int i =(KX/4-2);i<=(KX/4+2);i++) for(int j =(KY/4-2);j<=(KY/4+2);j++) T[ID1][i][j]=1.0;//左上付近に熱源あり } void simDiffusion(){ //■熱拡散方程式 for(int j=1;j=512) return RGB(255 , 0 , 0 ); if(R>=384) return RGB(255 , 511- R * 2, 0 ); if(R>=256) return RGB((R-256)*2, 255 , 0 ); if(R>=128) return RGB( 0 , R , 0 ); if(R<0) return RGB( 0 , 0 , 127); return RGB( 0 , R , 127-R); } void drawRectangle(int X1, int Y1, int X2, int Y2, int Color){//■矩形表示 HPEN pen=CreatePen(PS_SOLID, 1, Color); SelectObject(hBuff, pen); HBRUSH brush=CreateSolidBrush(Color); SelectObject(hBuff, brush); Rectangle(hBuff,X1,Y1, X2,Y2); DeleteObject(brush);DeleteObject(pen); } void dsp(){ //■メッシュ表示 for(int j=1; j