// ■円柱周りの流れ // 右ボタンをクリックすると停止。左ボタンで再開。 // 右ボタンをクリックしながら画面キャプチャすることができる。 #include "myWin.h" #include "stdio.h" #include "stdlib.h" #include "time.h" #include "math.h" #define frand()((double)rand()/(RAND_MAX+1)) #define PI 3.14159265358979 #define MX 101 #define MY 101 static double VX[MX][MY], VY[MX][MY], P[MX][MY], Q[MX][MY], TMP[MX][MY]; static double VXN[MX][MY], VYN[MX][MY], X[MX][MY], Y[MX][MY]; static double DT,RE,DX, DY, EPS, ACCPC; static int NX0, NY0, NX, NY, KK; static double rDX, rDY, rDT, rRE, DX2, DY2, rDX2, rDY2, FCT; static HDC hBuff; static HBITMAP hBM; //ビットマップ表示用 double average(double X, double Y){ return 0.5*(X+Y);} double average(double D1, double D2, double D3, double D4){return 0.25*(D1+D2+D3+D4);} void drawLine(int X1, int Y1, int X2, int Y2, int W, int Color){//■線分 HPEN pen=CreatePen(PS_SOLID,W, Color) ; SelectObject(hBuff, pen) ; MoveToEx(hBuff,X1,Y1,NULL);LineTo(hBuff, X2, Y2); DeleteObject(pen); } void drawPolygon(POINT poly[],int N, int lineW, int lColor, int bColor){//■多角形 HPEN pen=CreatePen(PS_SOLID, lineW, lColor) ; SelectObject(hBuff, pen) ; HBRUSH brush=CreateSolidBrush(bColor) ; SelectObject(hBuff, brush); Polygon(hBuff,poly,N); DeleteObject(brush) ; DeleteObject(pen); } int setX(double X){ return (int)(X*40+400);} int setY(double Y) { return (int)(Y*40+200);} void initialize(){ NX0=40; NY0=40; NX=NX0+1; NY=NY0+1; RE = 5000; DT = 0.005; DY = 0.075; KK=100; ACCPC=1; EPS=0.01; DX=2*PI/((double)(NX-2)); rDX=1/DX; rDY=1/DY; rDT=1/DT; rRE=1/RE; DX2=rDX*rDX; DY2=rDY*rDY; rDX2=1/(4*DX); rDY2=1/(4*DY); FCT=2/(2*DX2+2*DY2); double THT, YY;//座標設定 for(int j=0;jMV) MV=P[i][j]; return MV; } double minValue(double P[MX][MY], int nx, int ny){ double MV=1E+64; for(int i=1; i0.00001) T=(V-minV)/DV; int R=(int)(T*512); if(R>=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<0) return RGB( 0 , 255 , 0 ); return RGB( 0 , R , 0 ); } void crearBitmap(){ //■ビットマップクリア SelectObject(hBuff,GetStockObject(NULL_PEN)); PatBlt(hBuff,0, 0,1000,400,WHITENESS); } void drawP(){ crearBitmap(); POINT poly[4];double minV=minValue(P, NX, NY), maxV=maxValue(P, NX,NY); for(int j=1;j