// Test02.cpp : Defines the entry point for the application. // #include "stdafx.h" #include "W32Prj.h" #define _USE_MATH_DEFINES //enable for using M_PI, . . #include #define Arg M_PI /180 #define MAX_LOADSTRING 100 #include using namespace std; //complex required ! //#include //using namespace Gdiplus; // Global Variables: HINSTANCE hInst; // current instance TCHAR szTitle[MAX_LOADSTRING]; // The title bar text TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name double Fi,Th,Om,Ps,jj,kk,ll,mm,nn; //Transformace E3toE2 double gg,uu; double mx,my,mz,px,py,pz,pgg,puu; double mx1,my1,mz1; // zoom double a11,a22,a33,a12,a13,a23,a14,a24,a34,a44; HDC hdc,hdc1 ; HPEN hpenR,hpenG,hpenB ; // Forward declarations of functions included in this code module: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); void Transformace( HWND,double &, double &); void E3toE2(double ,double ,double , int & ,int & ); void PlotLine(HDC ,double ,double ,double ,double ,double ,double ) ; void MoveToxyz(HDC ,double ,double ,double ); void PlotLineTo(HDC ,double ,double ,double ); void PlotXYZ(HDC hdc ,double ,double ,double ); void MoveToraxayaz(HDC ,double ,double ,double ,double ) ; void PlotLineToraxayaz(HDC ,double ,double ,double ,double ) ; void Cube(HDC ,double ,double ,double ); void Fce1(HDC ); void Fce2(HDC ); void Fce3(HDC ); void Fce4(HDC ); void Fce5(HDC ); void Fce6(HDC ); void Fce7(HDC ); void Fce8(HDC ); void Fce10(HDC); int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // TODO: Place code here. MSG msg; HACCEL hAccelTable; // Initialize global strings LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_W32PRJ, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // Perform application initialization: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_W32PRJ); // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) msg.wParam; } // // FUNCTION: MyRegisterClass() // // PURPOSE: Registers the window class. // // COMMENTS: // // This function and its usage are only necessary if you want this code // to be compatible with Win32 systems prior to the 'RegisterClassEx' // function that was added to Windows 95. It is important to call this function // so that the application will get 'well formed' small icons associated // with it. // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_W32PRJ); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = (LPCTSTR)IDC_W32PRJ; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); return RegisterClassEx(&wcex); } // // FUNCTION: InitInstance(HANDLE, int) // // PURPOSE: Saves instance handle and creates main window // // COMMENTS: // // In this function, we save the instance handle in a global variable and // create and display the main program window. // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hwnd; hInst = hInstance; // Store instance handle in our global variable hwnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hwnd) { return FALSE; } nCmdShow=SW_SHOWMAXIMIZED ; nCmdShow=SW_SHOWNORMAL ; ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); return TRUE; } // // FUNCTION: WndProc(HWND, unsigned, WORD, LONG) // // PURPOSE: Processes messages for the main window. // // WM_COMMAND - process the application menu // WM_PAINT - Paint the main window // WM_DESTROY - post a quit message and return // // LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; TCHAR szBuffer[250] ; // RECT & rect´= 0; int wmId, wmEvent; static int cxClient, cyClient ; static unsigned short lastkey; //2Byte static BOOL bYes=TRUE; static BOOL Test[20] ; int i; complex j(0,1); complex l(1,0); complex c1,c2,c3; c1=1.0/j/j/l; /* hCursor = SetCursor (LoadCursor (NULL, IDC_WAIT)) ; ShowCursor (TRUE) ; SetCursor (hCursor) ; ShowCursor (TRUE) ; */ switch (message) { case WM_CREATE: Fi=30; Th=30; mx1=1; my1=1; mz1=1; case WM_SIZE: cxClient = LOWORD (lParam) ; cyClient = HIWORD (lParam) ; // cyClient= ((WORD)((DWORD_PTR)(lParam) >> 16)); //this is makro LOWOED // cyClient= ((unsigned short)((DWORD_PTR)(lParam) & 0xffff)); //nefunguje pgg = cxClient/2 ; puu = cyClient/2 ; a11=1; a22=1; a33=1; a12=0; a13=0; a23=0; a14=0; a24=0; a34=0; a44=-10000; return 0 ; case WM_LBUTTONDOWN : if(HIWORD (lParam)>20) //top area reserved { pgg= LOWORD (lParam) ; puu= HIWORD (lParam) ; } InvalidateRect (hwnd, NULL, TRUE) ; return 0 ; case WM_MOUSEMOVE : if ((HIWORD (lParam)<35) && (HIWORD (lParam)>20)) SetCursor (LoadCursor (NULL, IDC_UPARROW)) ; else SetCursor (LoadCursor (NULL, IDC_ARROW)) ; break ; case WM_KEYDOWN: switch (wParam) { case VK_LEFT: //MessageBox (NULL, TEXT ("VK_LEFT"), TEXT ("MessageBox"), MB_OK); Fi+=3; // 3 aby vyšlo cele číslo 90,180 , ... InvalidateRect (hwnd, NULL, TRUE) ; InvalidateRect (hwnd, NULL, TRUE); break ; case VK_RIGHT: Fi-=3; InvalidateRect (hwnd, NULL, TRUE) ; lastkey = VK_RIGHT; break ; case VK_UP: Th-=3; InvalidateRect (hwnd, NULL, TRUE) ; break ; case VK_DOWN: Th+=3; InvalidateRect (hwnd, NULL, TRUE) ; break ; } case WM_CHAR: switch(wParam) { case '1' : //1 x+ //MessageBox (NULL, TEXT ("1 presed"), TEXT ("MessageBox"), MB_OK); mx1*=1.1; InvalidateRect (hwnd, NULL, TRUE) ; break ; case '9': //9 x- //MessageBox (NULL, TEXT ("9 presed"), TEXT ("MessageBox"), MB_OK); mx1/=1.1; InvalidateRect (hwnd, NULL, TRUE) ; break ; case '3': //3 y+ my1*=1.1; InvalidateRect (hwnd, NULL, TRUE) ; break ; case '7': //7 y- my1/=1.1; InvalidateRect (hwnd, NULL, TRUE) ; break ; case '8': //8 z+ mz1*=1.1; InvalidateRect (hwnd, NULL, TRUE) ; break ; case '2': //2 z- mz1/=1.1; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'Q': //params a11=a11 + 0.1 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'A': a11 = a11 - 0.1 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'W': a22+=0.1 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'S': a22-=0.1 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'E': a33+=0.1 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'D': a33-=0.1 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'R': a12+=0.1 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'F': a12-=0.1 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'T': a13+=0.1 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'G': a13-=0.1 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'Z': a23+=0.1 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'H': a23-=0.1 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'U': //x a14+=10 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'J': a14-=10 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'I': //y a24+=10 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'K': a24-=10 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'O': //z a34+=10 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'L': a34-=10 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 'P': //r a44+=100 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; case 367 : //key ů a44-=100 ; InvalidateRect (hwnd, NULL, TRUE) ; break ; } //awitch WM_CHAR /* switch(HIWORD (wParam)) { } return 0 ; */ case WM_KEYUP: // InvalidateRect (hwnd, NULL, TRUE) ; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case ID_TEST_CUBE: //Cube Test[0]=TRUE; InvalidateRect (hwnd, NULL, TRUE) ; break; case ID_TEST_TEST1: //Linear for (i= 0 ; i <20 ; i+= 1) Test[i]=FALSE; Test[1]=TRUE; InvalidateRect (hwnd, NULL, TRUE) ; break; case ID_TEST_TEST2: //Sinus for (i= 0 ; i <20 ; i+= 1) Test[i]=FALSE; Test[2]=TRUE; InvalidateRect (hwnd, NULL, TRUE) ; break; case ID_TEST_TEST3: //This transf for (i= 0 ; i <20 ; i+= 1) Test[i]=FALSE; Test[3]=TRUE; InvalidateRect (hwnd, NULL, TRUE) ; break; case ID_TEST_TEST4: //Globe for (i= 0 ; i <20 ; i+= 1) Test[i]=FALSE; Test[4]=TRUE; InvalidateRect (hwnd, NULL, TRUE) ; break; case ID_TEST_CYLINDER: //Cylinder for (i= 0 ; i <20 ; i+= 1) Test[i]=FALSE; Test[5]=TRUE; InvalidateRect (hwnd, NULL, TRUE) ; break; case ID_TEST_PLANE: //Plane for (i= 0 ; i <20 ; i+= 1) Test[i]=FALSE; Test[6]=TRUE; InvalidateRect (hwnd, NULL, TRUE) ; break; case ID_TEST_SCREW: //Screw for (i= 0 ; i <20 ; i+= 1) Test[i]=FALSE; Test[7]=TRUE; InvalidateRect (hwnd, NULL, TRUE) ; break; case ID_TEST_FCE8: //Fce8 for (i= 0 ; i <20 ; i+= 1) Test[i]=FALSE; Test[8]=TRUE; InvalidateRect (hwnd, NULL, TRUE) ; break; case ID_TEST_VISIBILITY : //Visibility for (i= 0 ; i <20 ; i+= 1) Test[i]=FALSE; Test[10]=TRUE; InvalidateRect (hwnd, NULL, TRUE) ; break; case ID_TEST_TEST5: //Clear for (i= 0 ; i <20 ; i+= 1) Test[i]=FALSE; InvalidateRect (hwnd, NULL, TRUE) ; break; case IDM_ABOUT: DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hwnd, (DLGPROC)About); break; case IDM_EXIT: DestroyWindow(hwnd); break; default: return DefWindowProc(hwnd, message, wParam, lParam); } //switch (wmId) break; //case WM_COMMAND: case WM_PAINT: HCURSOR hCursor1,hCursor2 ; hdc = BeginPaint(hwnd, &ps); hCursor1 = GetCursor(); hCursor2 = SetCursor (LoadCursor (NULL, IDC_WAIT)) ; ShowCursor (TRUE) ; Transformace(hwnd,Fi,Th); //Axes 3D //SelectObject (hdc, GetStockObject (NULL_BRUSH)) ; hpenR= CreatePen(PS_SOLID, 1, RGB(0xff,0,0)); hpenB= CreatePen(PS_SOLID, 1, RGB(0,0,0xff)); SelectObject (hdc, hpenR) ; PlotLine(hdc,0,0,0,200,0,0); SetTextColor(hdc,RGB(0xff,0,0)); TextOut (hdc,(int)gg,(int)uu,TEXT("x"),1) ; SelectObject (hdc, hpenB) ; PlotLine(hdc,0,0,0,0,200,0); SetTextColor(hdc,RGB(0,0,0xff)); TextOut (hdc,(int)gg,(int)uu,TEXT("y"),1) ; SetTextColor(hdc,RGB(0,0,0)); DeleteObject (SelectObject (hdc, hpenR)) ; DeleteObject (SelectObject (hdc, hpenB)) ; DeleteObject (SelectObject (hdc, GetStockObject (BLACK_PEN))); PlotLine(hdc,0,0,0,0,0,200); TextOut (hdc,(int)gg,(int)uu,TEXT("z"),1) ; if (Test[0]) Cube(hdc,100,100,100); if (Test[1]) Fce1(hdc); if (Test[2]) Fce2(hdc); if (Test[3]) Fce3(hdc); if (Test[4]) Fce4(hdc); if (Test[5]) Fce5(hdc); if (Test[6]) Fce6(hdc); if (Test[7]) Fce7(hdc); if (Test[8]) Fce8(hdc); if (Test[10]) Fce10(hdc); //sprintf(szBuffer,TEXT("Fi=%4.0f Th=%4.0f ") ,Fi,Th ) ; TextOut (hdc, 0,0,szBuffer,_stprintf(szBuffer,TEXT(" Fi=%4.0f Th=%4.0f CurKeys, NumKeys, LeftMouse ") ,Fi,Th )); // TextOut (hdc, 0,20,szBuffer,wsprintf(szBuffer,TEXT(" %04X ") ,0x1234 && 0xF000 )); SetCursor (hCursor1) ; ShowCursor (TRUE) ; EndPaint(hwnd, &ps); break; //case WM_PAINT: case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, message, wParam, lParam); } //switch (message) return 0; } //CALLBACK WndProc // Message handler for about box. LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return TRUE; } break; } return FALSE; } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx //Fi-pohled ze strany Th-pohled z vysky void Transformace(HWND hwnd,double & Fi,double & Th) { double F,T,Om,Ps,mx,my,s,k ; // HDC hdc; // TCHAR szBuffer[250] ; s=0; k=0; if (Fi>=360) Fi=0.001; if (Fi<=0) Fi=359.999; if (Th>=360) Th=0.001; if (Th<=0) Th=359.999; if ((Fi> 90) && (Fi<=270)) s= -M_PI; if ((Fi> 180) && (Fi<=360)) k=-M_PI; if (Th>180) {s=s-M_PI; k=k-M_PI;}; if ((Fi< 0) && (Fi>=-180)) k= -M_PI; if ((Fi<-90) && (Fi>=-270)) s= -M_PI; T=Arg*Th; F=Arg*Fi; if (F==0) F=1E-12; if (T==0) T=1E-12; Om=atan(1/sin(T)*tan(F))+s; Ps=atan(1/sin(T)/tan(F))+k; mx=sqrt(1-pow(cos(T),2)*pow(cos(F),2)); my=sqrt(1-pow(cos(T),2)*pow(sin(F),2)); jj=cos(T); kk=mx*sin(Om); ll=my*sin(Ps); mm=mx*cos(Om); nn=my*cos(Ps); Om=Om/Arg; Ps=Ps/Arg; /* hdc=GetDC(hwnd); sprintf(szBuffer,TEXT(" Fi=%f Th=%f '\0 ' ") ,Fi,Th) ; TextOut (hdc, 0,20,szBuffer,100); ReleaseDC(hwnd,hdc); */ } void E3toE2(double x,double y,double z, double & gg,double & uu){ double x1,y1,z1; x1= x*mx1; //zooming from keyboard y1= y*my1; z1= z*mz1; gg = (-kk*x1+ll*y1) +pgg; uu =-(-mm*x1-nn*y1+jj*z1)+puu; } void PlotLine(HDC hdc ,double x1,double y1,double z1,double x2,double y2,double z2) { E3toE2(x1,y1,z1,gg,uu); MoveToEx (hdc, (int)gg,(int)uu,(LPPOINT)NULL) ; E3toE2(x2,y2,z2,gg,uu); LineTo (hdc, (int)gg,(int)uu) ; } //Kartezian void MoveToxyz(HDC hdc ,double x1,double y1,double z1) { E3toE2(x1,y1,z1,gg,uu); MoveToEx (hdc, (int)gg,(int)uu,(LPPOINT)NULL) ; } void PlotLineTo(HDC hdc ,double x1,double y1,double z1) { E3toE2(x1,y1,z1,gg,uu); LineTo (hdc, (int)gg,(int)uu) ; } //Spheric void MoveToraxayaz(HDC hdc ,double r,double ax,double ay,double az) { E3toE2(r*cos(ax*Arg),r*cos(ay*Arg),r*cos(az*Arg),gg,uu); MoveToEx (hdc, (int)gg,(int)uu,(LPPOINT)NULL) ; } void PlotLineToraxayaz(HDC hdc ,double r,double ax,double ay,double az) { E3toE2(r*cos(ax*Arg),r*cos(ay*Arg),r*cos(az*Arg),gg,uu); LineTo (hdc, (int)gg,(int)uu) ; } void PlotCross(HDC hdc ,double x1,double y1,double z1) { HPEN hpen = CreatePen(PS_SOLID, 3, RGB(0,0,0)); E3toE2(x1,y1,z1,gg,uu); MoveToEx(hdc, (int)gg - 5, (int)uu, (LPPOINT) NULL); //cros_size LineTo(hdc, (int)gg + 5, (int)uu); MoveToEx(hdc, (int)gg, (int)uu - 5, (LPPOINT) NULL); LineTo(hdc,(int) gg, (int)uu + 5); DeleteObject (SelectObject (hdc, hpen)) ; } void PlotXYZ(HDC hdc ,double x1,double y1,double z1) { TCHAR szBuffer[250] ; E3toE2(x1,y1,z1,gg,uu); MoveToEx(hdc, (int)gg, (int)uu, (LPPOINT) NULL); TextOut (hdc,(int)gg,(int)uu ,szBuffer,_stprintf(szBuffer, TEXT("(%3.0f ,%3.0f,%3.0f )") , x1,y1,z1 )); } void PlotAxes(HDC hdc ,double x1,double y1,double z1,TCHAR *szX1,TCHAR *szY1, TCHAR szZ1[]) { HPEN hpenR,hpenG,hpenB ; hpenR= CreatePen(PS_SOLID, 1, RGB(0xff,0,0)); hpenG= CreatePen(PS_SOLID, 1, RGB(0,0xff,0)); hpenB= CreatePen(PS_SOLID, 1, RGB(0,0,0xff)); //_tcslen(szX) SelectObject (hdc, hpenR) ; PlotLine(hdc,0,0,0,x1,0,0); SetTextColor(hdc,RGB(0xff,0,0)); TextOut (hdc,(int)gg,(int)uu,szX1,(int)_tcslen(szX1)) ; SelectObject (hdc, hpenB) ; PlotLine(hdc,0,0,0,0,y1,0); SetTextColor(hdc,RGB(0,0,0xff)); TextOut (hdc,(int)gg,(int)uu,szY1,(int)_tcslen(szY1)) ; SetTextColor(hdc,RGB(0,0,0)); DeleteObject (SelectObject (hdc, hpenR)) ; DeleteObject (SelectObject (hdc, hpenG)) ; DeleteObject (SelectObject (hdc, hpenB)) ; DeleteObject (SelectObject (hdc, GetStockObject (BLACK_PEN))); PlotLine(hdc,0,0,0,0,0,z1); TextOut (hdc,(int)gg,(int)uu,szZ1,(int)_tcslen(szZ1)) ; } void Cube(HDC hdc ,double x1,double y1,double z1) { E3toE2(x1,y1,z1,gg,uu); MoveToxyz(hdc, x1,y1,z1); PlotLineTo(hdc,x1,y1,0); PlotLineTo(hdc,x1,0,0); PlotLineTo(hdc,x1,0,z1); MoveToxyz(hdc, 0,y1,0); PlotLineTo(hdc,0,y1,z1); PlotLineTo(hdc,0,0,z1); PlotLineTo(hdc,x1,0,z1); PlotLineTo(hdc,x1,y1,z1); PlotLineTo(hdc,0,y1,z1); MoveToxyz(hdc,x1,y1,0); PlotLineTo(hdc,0,y1,0); } void Fce1 (HDC hdc) { //linear TextOut (hdc,0,0,TEXT("z= -x+100 "),26); for (double y= 0 ; y <50 ; y+= 1) { for (double x= 0 ; x <200 ; x+= 1) { double z= -x+100 ; //double z=50*sin(x/20)*cos(y/20); //double z=-x+100 ; unsigned long color=0xff0000; if (z<0) color=0x00ff00; E3toE2(x*1,y*1,z/1,gg,uu); SetPixel(hdc,(int)gg,(int)uu,color);//BGR } //for x } //for y PlotLine(hdc,200,0,0,200,0,-100); } void Fce2 (HDC hdc) { //sin*cox // TextOut (hdc,0,0,TEXT("z=50*sin(x/20)*cos(y/20) "),26); HPEN hpen1,hpen2 ; hpen1= CreatePen(PS_SOLID, 1, 0x000000); hpen2= CreatePen(PS_SOLID, 1, 0x00ee00); unsigned long color,color1,color2; double x,y,z,xx1,xx2,dxx1,yy1,yy2,dyy1; TCHAR szBuffer[250] ; TextOut (hdc, 0,0,szBuffer,_stprintf(szBuffer, TEXT(" Fi=%4.0f Th=%4.0f CurKeys, NumKeys, LeftMouse , Keys : QA,WS,..,OL \0 ") ,Fi,Th )); TextOut (hdc, 0,20,szBuffer,_stprintf(szBuffer, TEXT("z=50*sin(%4.1fx/20)*cos(%4.1fy/20)"),a11,a22)); xx1=0;xx2=200;dxx1=0.5; yy1=0;yy2=200;dyy1=2; color1=0x000000; color2=0x00CC00; if ((Fi>=0) && (Fi<=180)){ //visibility for (y= yy1 ; y 0) SelectObject (hdc, hpen1) ; if (z < 0) SelectObject (hdc, hpen2) ; PlotLineTo(hdc,x*1,y*1,z/1 ); } //for x } //for y } //if if ((Fi>=180) && (Fi<270)){ for (y= yy2 ; y>yy1 ; y-=dyy1) { for (x= xx2 ; x>xx1 ; x-=dxx1) { //double z=-x+100 ; z=50*sin(a11*x/20)*cos(a22*y/20); color=color1; if (z<0) color=color2; E3toE2(x*1,y*1,z/1,gg,uu); SetPixel(hdc,(int)gg,(int)uu,color);//BGR } //for x } //for y } //if if ((Fi>=270) && (Fi<360)){ for (x= xx1 ; xyy1 ; y-=dyy1) { z=50*sin(a11*x/20)*cos(a22*y/20); color=color1; if (z<0) color=color2; E3toE2(x*1,y*1,z/1,gg,uu); SetPixel(hdc,(int)gg,(int)uu,color);//BGR } //for x } //for y } //if DeleteObject (SelectObject (hdc, hpen1)) ; DeleteObject (SelectObject (hdc, hpen2)) ; } void Fce3 (HDC hdc) { //this transf double Th1,Fi1,Om1,Ps1; static double Om2=1; //old HPEN hpen1,hpen2 ; hpen1= CreatePen(PS_SOLID, 1, 0x000000); hpen2= CreatePen(PS_SOLID, 1, 0x00ee00); PlotAxes(hdc,200,200,200,TEXT("Fi"),TEXT("Th"),TEXT("Om")); TextOut (hdc,0,0,TEXT(" Om1=atan(1/sin(Th)*tan(Fi)) "),26); Th1=M_PI/6; for (Th1= 0 ; Th1 <2*M_PI ; Th1+= 0.2 ) { //2*M_PI Fi1= 0 ; // zpětný běh odstranit Om1=atan(1/sin(Th1)*tan(Fi1)); MoveToxyz(hdc ,Fi1*60,Th1*60,Om1*100); for (Fi1= 0 ; Fi1 <2*M_PI ; Fi1+= 0.01) { Om1=atan(1/sin(Th1)*tan(Fi1)); Ps1=atan(1/sin(Th1)/tan(Fi1)); E3toE2(Fi1*60,Th1*60,Om1*100,gg,uu); if ((Om1<0) && (Om2 >0)) { MoveToxyz(hdc ,Fi1*60,Th1*60,Om2*100); SelectObject (hdc, hpen1) ; PlotLineTo(hdc ,Fi1*60,Th1*60,0); SelectObject (hdc, hpen2) ; PlotLineTo(hdc ,Fi1*60,Th1*60,Om1*100); } if ((Om1>0) && (Om2 <0)) { MoveToxyz(hdc ,Fi1*60,Th1*60,Om2*100); SelectObject (hdc, hpen2) ; PlotLineTo(hdc ,Fi1*60,Th1*60,0); SelectObject (hdc, hpen1) ; PlotLineTo(hdc ,Fi1*60,Th1*60,Om1*100); } if (Om1 > 0) SelectObject (hdc, hpen1) ; if (Om1 < 0) SelectObject (hdc, hpen2) ; PlotLineTo(hdc ,Fi1*60,Th1*60,Om1*100); Om2=Om1; } //for x } //for y Fi1=Fi*M_PI/180; Th1=Th*M_PI/180; //grad to rad SelectObject (hdc, hpen1) ; Om1=atan(1/sin(Th1)*tan(Fi1)); MoveToxyz(hdc,Fi1*60,Th1*60,Om1*100); PlotLineTo(hdc ,Fi1*60,Th1*60,0); PlotLineTo(hdc ,Fi1*60,0,0); MoveToxyz(hdc,Fi1*60,Th1*60,0); PlotLineTo(hdc ,0,Th1*60,0); PlotCross(hdc,Fi1*60,Th1*60,Om1*100); DeleteObject (SelectObject (hdc, hpen1)) ; DeleteObject (SelectObject (hdc, hpen2)) ; } void Fce4(HDC hdc) { //sphere coordinate double r,Fi4,Th4; r=100; TextOut (hdc,0,0,TEXT("r=100 "),26); for (Th4 = 0 ; Th4 <90 ; Th4+= 2) { for (Fi4 = 0 ; Fi4 <90 ; Fi4+= 2) { r=100; //rovnice koule E3toE2(r*cos(Fi4*Arg)*sin(Th4*Arg),r*sin(Fi4*Arg)*sin(Th4*Arg),r*cos(Th4*Arg),gg,uu); SetPixel(hdc,(int)gg,(int)uu,RGB(0,0,0)); } } MoveToxyz(hdc,0,0,0); PlotLineTo(hdc ,100,100,100); } void Fce5(HDC hdc) { //cylinder coordinate double r,Fi4,z; r=100; TextOut (hdc,0,0,TEXT("r=100 "),26); for (z = 0 ; z <100 ; z+= 2) { for (Fi4 = 0 ; Fi4 <90 ; Fi4+= 2) { r=100; //rovnice válce E3toE2(r*cos(Fi4*Arg),r*sin(Fi4*Arg),z,gg,uu); SetPixel(hdc,(int)gg,(int)uu,RGB(0,0,0)); } } } void Fce6(HDC hdc) { //kartezian coordinate double x,y,z; TextOut (hdc,0,0,TEXT("A*(x-x1)+B*(y-y1)+C*(z-z1)=0 "),26); for (y = 0 ; y <100 ; y+= 2) { for (x = 0 ; x <100 ; x+= 2) { //rovnice roviny z= -(10*(x-100)+10*(y-100))/10 - 100; E3toE2(x,y,z,gg,uu); if(z>0) SetPixel(hdc,(int)gg,(int)uu,RGB(0,0,0)); //else SetPixel(hdc,(int)gg,(int)uu,RGB(0,0xFF,0)); } } MoveToxyz(hdc,100,0,0); PlotLineTo(hdc ,0,100/2,100/2); MoveToxyz(hdc,0,0,0); PlotLineTo(hdc ,100,100,100); } void Fce7(HDC hdc) { //screwing double x,y,z,t,om; om=0.2; MoveToxyz(hdc,0,0,0); for (t = 0 ; t <100 ; t+=1) { x= 100*sin(om*t); y= 100*cos(om*t); z= t; PlotLineTo(hdc ,x,y,z); } } void Fce8(HDC hdc) { //obecna kvadr plocha met pul int double x,y,z,f1,f2; double x1,y1,z1; double dx; double eps = 0.001; double v1; TCHAR szBuffer[250] ; // xxxxxxxxxx test xxxxxxxxxxxxxxx struct strucVector{ double x ; double y ; double z ; } pt3,V3[5]; class classVector{ public: double x ; double y ; double z ; } cl3,C3[5]; pt3.x = 0; V3[1].x = 0; // V3[1]=(0,0,0); //pt3=[1,1,1]; cl3.x = 0; C3[1].x = 0; //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx TextOut (hdc, 0,0,szBuffer,_stprintf(szBuffer, TEXT(" Fi=%4.0f Th=%4.0f CurKeys, NumKeys, LeftMouse , Keys : QA,WS,..,OL \0 ") ,Fi,Th )); TextOut (hdc, 0,20,szBuffer,_stprintf(szBuffer,TEXT("%+4.1fxx%+4.1fyy%+4.1fzz%+4.1fxy%+4.1fxz%+4.1fyz%+4.1fx%+4.1fy%+4.1fz%+4.1f = 0 \0") , a11,a22,a33,a12,a13,a23,a14,a24,a34,a44 )); // TextOut (hdc,0,20,TEXT("a11*x*x+a22*y*y+a33*z*z+2*a12*x*y+2*2*a13*x*z+2*a23*y*z+2*a14*x+2*a24*y+2*a34*z+a44 "),88); x=y=z=0; x1=y1=z1=0; dx = 2; v1=0; for (z = -110 ; z <110 ; z+= 2) { for (y = -110 ; y <110 ; y+= 2) { x = -110 ; f1=a11*x*x+a22*y*y+a33*z*z+a12*x*y+a13*x*z+a23*y*z+a14*x+a24*y+a34*z+a44; for (x = -110 ; x <110 ; x+= dx) { f2=a11*x*x+a22*y*y+a33*z*z+a12*x*y+a13*x*z+a23*y*z+a14*x+a24*y+a34*z+a44; if (f1*f2<0) { v1=v1+abs(z); E3toE2(x-dx/2,y,z,gg,uu); if(z<=0) SetPixel(hdc,(int)gg,(int)uu,0x00FF00); //=RGB(0,0xff,0) //else if(x<=0) SetPixel(hdc,(int)gg,(int)uu,0x0000FF); else SetPixel(hdc,(int)gg,(int)uu,0); //Black } f1=f2; }//for }//for }//for TextOut (hdc, 0,40,szBuffer,_stprintf(szBuffer,TEXT(" Objem = %4.1f "),v1 )); } void Fce10(HDC hdc) { //Color UINT x,y,z; TCHAR szBuffer[250] ; PlotAxes(hdc,300,300,300,TEXT("R"),TEXT("G"),TEXT("B")); //return; // Fi 0..90 Th 90..0..-90(270) for (z = 0x0 ; z <0xff ; z++) { for (x = 0x0 ; x <0xff ; x++) { for (y = 0x0 ; y <0xff ; y++) { E3toE2(x,y,z,gg,uu); SetPixel(hdc,(int)gg,(int)uu,RGB((int)x,(int)y,(int)z)) ; }//for }//for }//for Cube(hdc,255,255,255); // PlotXYZ(hdc ,255,255,255); x=y=z=0xFF; E3toE2(x,y,z,gg,uu); MoveToEx(hdc, (int)gg, (int)uu, (LPPOINT) NULL); TextOut (hdc,(int)gg,(int)uu ,szBuffer,_stprintf(szBuffer, TEXT("(%0X ,%0X,%0X )") , x,y,z )); PlotCross(hdc ,255,255,255); // _stprintf(szBuffer,TEXT(" GetDeviceCaps(%d) = %d ") , NUMCOLORS, GetDeviceCaps(hdc,NUMCOLORS) ); // MessageBox (NULL, szBuffer, TEXT (" GetDeviceCaps(NUMCOLORS)"), MB_OK); MessageBox (NULL, TEXT (" Méně|Více barev ? : Plocha/Vlastnosti/Nastacwní/Kvalta barev "), TEXT ("Help"), MB_OK); } /* PlotLineTo(hdc, 100*sin(ax*Arg),100*cos(ax*Arg),0); E3toE2(r*cos(ax*Arg),r*cos(ay*Arg),r*cos(az*Arg),gg,uu); MoveToxyz(hdc, x,y,z); PlotLineTo(hdc, x+1,y+1,z+1); MoveToraxayaz(hdc ,0,0,0,0); PlotLineToraxayaz(hdc ,300,45,45,45); //cyl coordinate MoveToraxayaz(hdc ,r,0,90-0,0); Beep(1000,200); MessageBeep(MB_OK); do { M=(A+B)/2; if (Fce9(A,y,z)*Fce9(M,y,z)<=0) B=M; else A=M; }while ((B-A)>eps); MoveToxyz(hdc,x1,y1,z1); PlotLineTo(hdc ,x,y,z); x1=x;y1=y;z1=z; TCHAR szBuffer[250] ; TextOut (hdc, 30,0,szBuffer,_stprintf(szBuffer,TEXT(" %4.1f \0 ") , f2 )); TextOut (hdc, 0,30,szBuffer,_stprintf(szBuffer,TEXT(" RGB %02X %02X %02X "),(int)x,(int)y,(int)z )); _stprintf(szBuffer,TEXT(" %d ") , wParam ); MessageBox (NULL, szBuffer, TEXT ("MessageBox"), MB_OK); */