<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                一、 1、參數: arc1 = (-3.0 / 16.0)*Pild; int x1 = 290; int y1 = 410; line01light02(hdc, arc1, 19, x1,y1); //參數說明: hdc繪圖板,入射角arc1= 7/16PI, x1=300,y1=410為入射光線初始坐標 ![](https://box.kancloud.cn/9ca60154e5a90e7c38c06e46602db9ae_824x757.png) 核心代碼: ``` void line01light02(HDC hdc, double arc1, unsigned long lineLen, double X01, double Y01) { // cou02t.open("f:/Cout181206cou02t_1202.txt"); double arc1arg02 = regularAngle(arc1); double X001 = X01; double Y001 = Y01; double X002 = X001; double Y002 = Y001; line2normal(hdc, arc1, X001, Y001, RGB(0, 200, 200), 10); cout << "[arc1arg01:" << arc1 << "]-"; cout << "[arc1arg02:" << arc1 << "]; "; unsigned long itime = 0; double old1X001 = X001; double old1Y001 = Y001; double mid01X01 = X001; double mid01Y01 = Y001; double arc01normal01origin001; double arc1normal01; double fanshe01Arc01; double reflecteAng01; double Xorigin01; double Yorigin01; // //循環光走(光線前進-簡稱光進)并反射等 //do { // lable110start: if (lineLen < 1) { return; } lable120: itime = 1; cou02t << "[itime:" << itime << "]_"; lable220: //開始算 反射角,并 (繼續)光進 Xorigin01 = cos(arc1arg02)*(double)itime; Yorigin01 = sin(arc1arg02)*(double)itime; lable230: X001 = Xorigin01 + old1X001; Y001 = Yorigin01 + old1Y001; setpixe02l(hdc, X001, Y001, RGB(255, 25, 0));// , 255, 0));//繪圖封裝,封裝都是有目的 的;沒有目的 的“瞎封裝”…會從我的小組被開除--Terry. lable510: //判斷并(光線)步進: //if先判斷是否在月亮形狀里: (isInC2littlecircle && !isInC1BigCircle) if (isInMoon(X001, Y001)) {//if110 itime = 1; lineLen--; old1X001 = X001; old1Y001 = Y001; itime++; goto lable220; }//if110 //與小圓的上弧相交,else if下面判斷:是否出了月亮,即出了小圓,(當然)也出了大圓 else if ( isInMoon(old1X001,old1Y001) && (1!=isInC2littlecircle(X001,Y001) && 1!=isInC1BigCircle(X001,Y001) ) ) { double arc01normal01origin01 = atan( (400-X001)/(Y001-400) ); arc1normal01 = Pild / 2.0 + arc01normal01origin01; line2normal(hdc, arc1normal01, old1X001, old1Y001, RGB(0, 100, 0), 5); //暗綠色法線 fanshe01Arc01 = arc1arg02 - 2 * arc1normal01; reflecteAng01=Pild - fanshe01Arc01; line2normal(hdc, reflecteAng01, old1X001, old1Y001, RGB(0, 255, 0), 6);//亮綠色反射線 arc1arg02 = reflecteAng01; cou02t << "[01-arc1normal01:" << arc1normal01 << "]"; // system("pause"); goto lable220; }else if ( isInMoon(old1X001,old1Y001) && (1==isInC2littlecircle(X001,Y001) && 1==isInC1BigCircle(X001,Y001) ) ) { cou02t << "Hell01!" << endl; //if110elseif120 //elseif下面判斷:是否出了月亮,既然在小圓內,(但)仍然在大圓內(兩圓相交處 //先規格、規范化入射角: double arc1ang03=arc1arg02; // arc1ang03= regularAngle(arc1arg02); while (arc1ang03 > Pild) { arc1ang03 =arc1ang03- 2 * Pild; } while (arc1ang03 < -Pild) { arc1ang03 = arc1ang03 + 2*Pild; } //arc01normal01origin001 = atan((-400 +X001 / (Y001 - 0) ) ); arc01normal01origin001 = asin((-X001 + 400) / 400); arc1normal01 = Pild/2.0+ arc01normal01origin001;//(/*Pild / 2.0*/ - arc01normal01origin001); // line2normal(hdc, arc1normal01, old1X001, old1Y001, RGB(0, 200,0), 15); //暗Green法線 line2normal(hdc, Pild+arc1normal01, old1X001, old1Y001, RGB(0, 200, 0), 395); //暗Green法線 fanshe01Arc01 = Pild+arc1ang03 - 2 * arc1normal01; reflecteAng01 = -fanshe01Arc01; cou02t << "Hello!" << endl; cou02t << endl << "[入射角arc1arg02:" << arc1arg02 << "(角度:" << arc1arg02 * 180.0 / Pild << "]_"; cou02t << endl << "[入射角規范化arc1ang03:" << arc1ang03 << "(角度:" << arc1ang03 * 180.0 / Pild << "]_"; cou02t << endl<<"[法線arc01normal01origin001" << arc01normal01origin001 << "(角度:" << arc01normal01origin001 * 180.0 / Pild << "]_"; cou02t << "[arc1normal01" << arc1normal01 << "(角度:" << arc1normal01 * 180.0 / Pild << "] "; cou02t << "[reflecteAng01" << reflecteAng01 << "(反射角度:" << reflecteAng01 * 180.0 / Pild << "]" << endl; arc1arg02 = reflecteAng01; line2normal(hdc, reflecteAng01, old1X001,old1Y001, RGB(0,0,255), 6); //藍色反射線 cou02t << "[arc1normal01:" << arc1normal01 << "]"; // system("pause"); goto lable220; }//if110elseif130 //不在小圓內,但在大圓內(第4塊--特殊區域 else if (isInMoon(old1X001,old1Y001) && (!isInC2littlecircle(X001,Y001)&&isInC1BigCircle(X001,Y001) ) ) { lable910: //迭代找第1次,第一個弧的交點,即不在inInMoon內的第一個點 mid01X01 = (X001 + old1X001) / 2; mid01Y01 = (Y001 + old1Y001) / 2; if (isInMoon(mid01X01, mid01Y01)) { goto lable910; } else//注意此時,mid01X01,Y01不在Moon內了,已經 { X001 = mid01X01; Y01 = mid01Y01; //相當于退回中點(中值點 goto lable510; } }//if110elseif140 // //while (true); // }//void line01light02( ``` 完整代碼: ``` // WinPro1moon01billiard181202a1.cpp : 定義應用程序的入口點。 #include "stdafx.h" #include "WinPro1moon01billiard181202a1.h" #include <iostream> #include <fstream> #include <iomanip> using namespace std; #define MAX_LOADSTRING 100 // 全局變量: //浮點數計PI(π): long double Pild = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196; HINSTANCE hInst; // 當前實例 WCHAR szTitle[MAX_LOADSTRING]; // 標題欄文本 WCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口類名 ofstream cou02t; // 此代碼模塊中包含的函數的前向聲明: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: 在此處放置代碼。 //調用Console控制臺 AllocConsole(); #pragma warning(disable:4996) _tfreopen(TEXT("CONOUT$"), TEXT("w"), stdout); _tfreopen(TEXT("CONOUT$"), TEXT("w"), stderr); _tfreopen(TEXT("CONIN$"), TEXT("r"), stdin); #pragma warning(default:4996) _tsetlocale(LC_ALL, TEXT("chs")); // cout << setprecision(99) << Pild << endl; // 初始化全局字符串 LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadStringW(hInstance, IDC_WINPRO1MOON01BILLIARD181202A1, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // 執行應用程序初始化: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINPRO1MOON01BILLIARD181202A1)); MSG msg; // 主消息循環: while (GetMessage(&msg, nullptr, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) msg.wParam; } // // 函數: MyRegisterClass() // // 目標: 注冊窗口類。 // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEXW wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINPRO1MOON01BILLIARD181202A1)); wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINPRO1MOON01BILLIARD181202A1); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassExW(&wcex); } // // 函數: InitInstance(HINSTANCE, int) // // 目標: 保存實例句柄并創建主窗口 // // 注釋: // // 在此函數中,我們在全局變量中保存實例句柄并 // 創建和顯示主程序窗口。 // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { hInst = hInstance; // 將實例句柄存儲在全局變量中 HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } // int C2R200little = 200; int C2_X02little_pianyi400 = 400; int C2_Y02little_pianyi400 = 400; int Y_high600 = 600; int C1R1big400 = 400; int C1_X01big_pianyi400 = 400; int C1_Y01big_pianyi400 = 0;// 100; // double regularAngle(double ang1) { while (ang1 < -(Pild)) { ang1 + 2 * Pild; } while (ang1 > Pild) { ang1 - 2 * Pild; } return ang1; } // void setpixe02l(HDC hdc, int x, int y, COLORREF rgb1) { SetPixel(hdc, x, Y_high600 - y, rgb1); } void setpixe03l(HDC hdc, int x, int y, COLORREF rgb1 ,int R=3) { SetPixel(hdc, x, Y_high600 - y, rgb1); for (int i = 0; i < 360; ++i) { int x = R*cos(i); int y = R*sin(i); setpixe02l(hdc, x, y, rgb1); } } //專畫法線 void line2normal(HDC hdc, double arc1, double x, double y, COLORREF rgb1, double R) { for (int i = 0; i < R; ++i) { int x001 = i * cos(arc1) + x; int y001 = i * sin(arc1) + y; setpixe02l(hdc, x001, y001, rgb1); } } // //計算歐氏(歐幾里得)距離 double SquareOfEuclideanDistance(double x1, double x0, double y1, double y0) { return((x1 - x0)*(x1 - x0) + (y1 - y0)*(y1 - y0)); } // int isInC1BigCircle(double x1, double y1) { if (SquareOfEuclideanDistance(x1, 400, y1, 0) <= (400 * 400)) { return 1; } else return 0; } // int isInC2littlecircle(double x1, double y1) { if (SquareOfEuclideanDistance(x1, 400, y1, 400) <= (200 * 200)) { return 1; } else return 0; } //in Moon ,即在小圓,不在大圓里 int isInMoon(double x, double y) { if (1 == isInC2littlecircle(x, y) && 1 != isInC1BigCircle(x, y)) { return 1; } return 0; } // // void line01light02(HDC hdc, double arc1, unsigned long lineLen, double X01, double Y01) { // cou02t.open("f:/Cout181206cou02t_1202.txt"); double arc1arg02 = regularAngle(arc1); double X001 = X01; double Y001 = Y01; double X002 = X001; double Y002 = Y001; line2normal(hdc, arc1, X001, Y001, RGB(0, 200, 200), 10); cout << "[arc1arg01:" << arc1 << "]-"; cout << "[arc1arg02:" << arc1 << "]; "; unsigned long itime = 0; double old1X001 = X001; double old1Y001 = Y001; double mid01X01 = X001; double mid01Y01 = Y001; double arc01normal01origin001; double arc1normal01; double fanshe01Arc01; double reflecteAng01; double Xorigin01; double Yorigin01; // //循環光走(光線前進-簡稱光進)并反射等 //do { // lable110start: if (lineLen < 1) { return; } lable120: itime = 1; cou02t << "[itime:" << itime << "]_"; lable220: //開始算 反射角,并 (繼續)光進 Xorigin01 = cos(arc1arg02)*(double)itime; Yorigin01 = sin(arc1arg02)*(double)itime; lable230: X001 = Xorigin01 + old1X001; Y001 = Yorigin01 + old1Y001; setpixe02l(hdc, X001, Y001, RGB(255, 25, 0));// , 255, 0));//繪圖封裝,封裝都是有目的 的;沒有目的 的“瞎封裝”…會從我的小組被開除--Terry. lable510: //判斷并(光線)步進: //if先判斷是否在月亮形狀里: (isInC2littlecircle && !isInC1BigCircle) if (isInMoon(X001, Y001)) {//if110 itime = 1; lineLen--; old1X001 = X001; old1Y001 = Y001; itime++; goto lable220; }//if110 //與小圓的上弧相交,else if下面判斷:是否出了月亮,即出了小圓,(當然)也出了大圓 else if ( isInMoon(old1X001,old1Y001) && (1!=isInC2littlecircle(X001,Y001) && 1!=isInC1BigCircle(X001,Y001) ) ) { double arc01normal01origin01 = atan( (400-X001)/(Y001-400) ); arc1normal01 = Pild / 2.0 + arc01normal01origin01; line2normal(hdc, arc1normal01, old1X001, old1Y001, RGB(0, 100, 0), 5); //暗綠色法線 fanshe01Arc01 = arc1arg02 - 2 * arc1normal01; reflecteAng01=Pild - fanshe01Arc01; line2normal(hdc, reflecteAng01, old1X001, old1Y001, RGB(0, 255, 0), 6);//亮綠色反射線 arc1arg02 = reflecteAng01; cou02t << "[01-arc1normal01:" << arc1normal01 << "]"; // system("pause"); goto lable220; }else if ( isInMoon(old1X001,old1Y001) && (1==isInC2littlecircle(X001,Y001) && 1==isInC1BigCircle(X001,Y001) ) ) { cou02t << "Hell01!" << endl; //if110elseif120 //elseif下面判斷:是否出了月亮,既然在小圓內,(但)仍然在大圓內(兩圓相交處 //先規格、規范化入射角: double arc1ang03=arc1arg02; // arc1ang03= regularAngle(arc1arg02); while (arc1ang03 > Pild) { arc1ang03 =arc1ang03- 2 * Pild; } while (arc1ang03 < -Pild) { arc1ang03 = arc1ang03 + 2*Pild; } //arc01normal01origin001 = atan((-400 +X001 / (Y001 - 0) ) ); arc01normal01origin001 = asin((-X001 + 400) / 400); arc1normal01 = Pild/2.0+ arc01normal01origin001;//(/*Pild / 2.0*/ - arc01normal01origin001); // line2normal(hdc, arc1normal01, old1X001, old1Y001, RGB(0, 200,0), 15); //暗Green法線 line2normal(hdc, Pild+arc1normal01, old1X001, old1Y001, RGB(0, 200, 0), 395); //暗Green法線 fanshe01Arc01 = Pild+arc1ang03 - 2 * arc1normal01; reflecteAng01 = -fanshe01Arc01; cou02t << "Hello!" << endl; cou02t << endl << "[入射角arc1arg02:" << arc1arg02 << "(角度:" << arc1arg02 * 180.0 / Pild << "]_"; cou02t << endl << "[入射角規范化arc1ang03:" << arc1ang03 << "(角度:" << arc1ang03 * 180.0 / Pild << "]_"; cou02t << endl<<"[法線arc01normal01origin001" << arc01normal01origin001 << "(角度:" << arc01normal01origin001 * 180.0 / Pild << "]_"; cou02t << "[arc1normal01" << arc1normal01 << "(角度:" << arc1normal01 * 180.0 / Pild << "] "; cou02t << "[reflecteAng01" << reflecteAng01 << "(反射角度:" << reflecteAng01 * 180.0 / Pild << "]" << endl; arc1arg02 = reflecteAng01; line2normal(hdc, reflecteAng01, old1X001,old1Y001, RGB(0,0,255), 6); //藍色反射線 cou02t << "[arc1normal01:" << arc1normal01 << "]"; // system("pause"); goto lable220; }//if110elseif130 //不在小圓內,但在大圓內(第4塊--特殊區域 else if (isInMoon(old1X001,old1Y001) && (!isInC2littlecircle(X001,Y001)&&isInC1BigCircle(X001,Y001) ) ) { lable910: //迭代找第1次,第一個弧的交點,即不在inInMoon內的第一個點 mid01X01 = (X001 + old1X001) / 2; mid01Y01 = (Y001 + old1Y001) / 2; if (isInMoon(mid01X01, mid01Y01)) { goto lable910; } else//注意此時,mid01X01,Y01不在Moon內了,已經 { X001 = mid01X01; Y01 = mid01Y01; //相當于退回中點(中值點 goto lable510; } }//if110elseif140 // //while (true); // }//void line01light02(HDC hdc, double arc1, unsigned long linelen, double x0, double y0 // // void wm01paint01(HDC hdc) { //畫2圓: //畫小圓Circle02: for (int i = 0; i < 361; ++i) { double arc02 = i * Pild / 180; int x02little = cos(arc02)*C2R200little + C2_X02little_pianyi400; int y02little = sin(arc02)*C2R200little + C2_Y02little_pianyi400; setpixe02l(hdc, x02little, y02little, RGB(0, 100, 0) ); } //畫大圓Circle01: for (int i = 0; i < 10*350; ++i) { double arc01 = i * Pild / 180 /10; int x02big = cos(arc01)*C1R1big400 + C1_X01big_pianyi400; int y02big = sin(arc01)*C1R1big400 + C1_Y01big_pianyi400; setpixe02l(hdc, x02big, y02big, RGB(0, 100, 0)); } double arc1; //輸入初始參數: arc1 = (-3.0 / 16.0)*Pild; int x1 = 290; int y1 = 410; line01light02(hdc, arc1, 19, x1,y1); //參數說明: hdc繪圖板,入射角arc1= 7/16PI, x1=300,y1=410為入射光線初始坐標 setpixe02l(hdc, 1 + x1, 1 + y1, RGB(0, 0, 255)); setpixe03l(hdc, x1, y1, RGB(0, 0, 255),5); }//void wm01paint01(HDC hdc // 函數: WndProc(HWND, UINT, WPARAM, LPARAM) // // 目標: 處理主窗口的消息。 // // WM_COMMAND - 處理應用程序菜單 // WM_PAINT - 繪制主窗口 // WM_DESTROY - 發送退出消息并返回 // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COMMAND: { int wmId = LOWORD(wParam); // 分析菜單選擇: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } } break; case WM_PAINT: {//case110 PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); // TODO: 在此處添加使用 hdc 的任何繪圖代碼... wm01paint01(hdc); EndPaint(hWnd, &ps); }//case110 break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } // “關于”框的消息處理程序。 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: return (INT_PTR)TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } break; } return (INT_PTR)FALSE; } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看