#include "myWin.h" #include "math.h" #include "stdio.h" #define BITX 400 #define BITY 400 #define PI 3.1415926535897932385 static HDC hbuf; static HBITMAP hBM; double df=0.01*PI, ds=0.001, sigma=1.073; double fai=2*PI/3.07, lambda=2.5, a=0.4; void initBitMap(HWND hw){ HDC hdc=GetDC(hw); hBM=CreateCompatibleBitmap(hdc,BITX,BITY); hbuf=CreateCompatibleDC(hdc);SelectObject(hbuf,hBM); SelectObject(hbuf,GetStockObject(NULL_PEN)); ReleaseDC(hw, hdc); } void clearBitmap(){ PatBlt(hbuf,0,0,BITX,BITY,WHITENESS); } void strDbl(double A, TCHAR str[]){ char tmp[256];int i; sprintf(tmp, "%7.4lf", A); for(i=0; tmp[i]!=0; i++) str[i]=tmp[i]; str[i]=0; } void strDsp(TCHAR name[], double A, TCHAR str[]){ int i; for(i=0; name[i]!=0; i++) str[i]=name[i]; strDbl(A, &str[i]); } void dspValue(){ TCHAR str[256]; HFONT hf=CreateFont(12,0,0,0,FW_NORMAL,FALSE, FALSE, FALSE, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH|FF_MODERN, NULL); SelectObject(hbuf,hf); TEXTMETRIC tm;GetTextMetrics(hbuf, &tm);int h=tm.tmHeight; SetTextColor(hbuf,0); SetBkMode(hbuf,TRANSPARENT); strDsp(TEXT("φ = "), fai, str); TextOut(hbuf,20, 20 ,str,lstrlen(str)); strDsp(TEXT("σ = "), sigma, str); TextOut(hbuf,20, 20+h ,str,lstrlen(str)); DeleteObject(hf); } void cmpIter(){ clearBitmap(); dspValue(); double XX=0.2, YY=0.2, X, Y; for(int i=1;i<10000;i++){ X=XX; Y=YY; XX=sigma*(X*cos(fai)-Y*sin(fai))+X*Y; YY=sigma*(X*sin(fai)+Y*cos(fai))+X*X+Y*Y*Y; SetPixel(hbuf,(int)(XX*100+200),(int)(200-YY*100),0x7700); } } void procLButtonDown(HWND hw, WPARAM wp, LPARAM lp){ sigma+=ds; if(sigma>1.16){ sigma=1.00; fai+=df; if(fai>0.8*PI) fai=0.4*PI; } cmpIter(); InvalidateRect(hw,NULL,FALSE); } void procCreate(HWND hw, WPARAM wp, LPARAM lp){ MoveWindow(hw,0,0,BITX,BITY,NULL); SetWindowText(hw,TEXT("グモウスキーとミラの別の写像2")); initBitMap(hw); fai=0.4*PI; sigma=1.00-ds; //fai=0.6*PI; sigma=1.13; SetTimer(hw,1,20,NULL); procLButtonDown(hw,wp,lp); } void procTimer(HWND hw, WPARAM wp, LPARAM lp){ procLButtonDown(hw,wp,lp); } void procPaint(HWND hw, WPARAM wp, LPARAM lp){ PAINTSTRUCT ps; HDC hdc=BeginPaint(hw, &ps); BitBlt(hdc,0,0,BITX,BITY,hbuf,0,0,SRCCOPY); EndPaint(hw,&ps); } LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp, LPARAM lp){ switch(msg){ case WM_DESTROY : PostQuitMessage(0) ; return 0; case WM_CREATE : procCreate(hw,wp,lp) ; return 0; case WM_TIMER : procTimer(hw,wp,lp) ; return 0; case WM_LBUTTONDOWN : procLButtonDown(hw,wp,lp) ; return 0; case WM_PAINT : procPaint (hw, wp, lp); return 0; } return DefWindowProc(hw, msg, wp, lp); }