日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

編寫一個(gè)程序,在屏幕上出現(xiàn)一個(gè)圓心沿正弦曲線軌跡移動(dòng)的實(shí)心圓,且每隔四分之一周期,圓的填充色和圓的周邊顏色都發(fā)生變化,同時(shí)圓的半徑在四分之一周期之內(nèi)由正弦曲線幅值的0.2倍至0.6倍線性增長(zhǎng)。

 wangprince2017 2018-07-14

南京信息工程大學(xué)  實(shí)驗(yàn)(實(shí)習(xí))報(bào)告

實(shí)驗(yàn)(實(shí)習(xí))名稱  圖形程序設(shè)計(jì)及其應(yīng)用  實(shí)驗(yàn)(實(shí)習(xí))日期

一、實(shí)驗(yàn)?zāi)康?/span>

1.熟悉圖形設(shè)備接口的概念及其應(yīng)用。

  

二、實(shí)驗(yàn)內(nèi)容及步驟

 實(shí)驗(yàn)任務(wù)

1.熟悉基于圖形應(yīng)用的程序設(shè)計(jì);

2.掌握刷新技術(shù)及其應(yīng)用;

3.掌握映射模式的應(yīng)用;

4.掌握繪圖工具的使用。

 實(shí)驗(yàn)內(nèi)容

   編寫一個(gè)程序,在屏幕上出現(xiàn)一個(gè)圓心沿正弦曲線軌跡移動(dòng)的實(shí)心圓,且每隔四分之一周期,圓的填充色和圓的周邊顏色都發(fā)生變化,同時(shí)圓的半徑在四分之一周期之內(nèi)由正弦曲線幅值的0.2倍至0.6倍線性增長(zhǎng)。

程序代碼:

#include<windows.h>

#include<stdlib.h>

#include<string.h>

#include<math.h>

#define Pi 3.1415926

 

long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);

double dfTheta=0,dfRange=100.0;

long i=0,j=0;

long lCentreX=0,lCentreY=0,lRadious=(long)(0.2*dfRange);

POINT lpSin[100];

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)

{

HWND hwnd ;

MSG Message ;

WNDCLASS wndclass ;

wndclass.cbClsExtra=0;                  //窗口類無(wú)擴(kuò)展

wndclass.cbWndExtra=0;               //窗口實(shí)例無(wú)擴(kuò)展

wndclass.hInstance=hInstance;       //當(dāng)前實(shí)例句柄

    wndclass.hCursor=LoadCursor(NULL,IDC_ARROW) ;      //窗口采用箭頭光標(biāo)

wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //窗口背景為白色

wndclass.lpszMenuName=NULL; //窗口中無(wú)菜單

wndclass.lpszClassName="SIN" ;  //窗口類名為"窗口"

    wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);     //窗口的最小化圖標(biāo)為缺省圖標(biāo)

    wndclass.lpfnWndProc=WndProc;   //定義窗口處理函數(shù)

    wndclass.style=0;

    if(!RegisterClass( &wndclass))       //如果注冊(cè)失敗則發(fā)出警告

{ MessageBeep(0) ;     

return FALSE ;

}

//---------------- 創(chuàng)建窗口 -------------------

hwnd=CreateWindow(

           "SIN",        //窗口類名

           "4_6",                  //窗口實(shí)例的標(biāo)題名

           WS_OVERLAPPEDWINDOW,   //窗口的風(fēng)格

           CW_USEDEFAULT,

           0,      //窗口左上角坐標(biāo)為缺省值

           CW_USEDEFAULT,

           0,      //窗口的高和寬為缺省值

           NULL,                          //此窗口無(wú)父窗口

           NULL,                          //此窗口無(wú)主菜單

           hInstance,              //創(chuàng)建此窗口的應(yīng)用程序的當(dāng)前句柄

         NULL                          //不使用該值

           );

//--------------- 顯示窗口 ----------------------

ShowWindow( hwnd, nCmdShow) ;

//-------------- 繪制用戶區(qū) ---------------------

UpdateWindow(hwnd);

//--------------- 消息循環(huán) ----------------------

for(int j=0;j<100;j++)    //生成正弦曲線的點(diǎn)坐標(biāo)

 {

lpSin[j].x=(long)(j*2*Pi/100*60);

lpSin[j].y=(long)(dfRange*sin(j*2*Pi/100));

 }

 

while( GetMessage(&Message, 0, 0, 0))

{

           TranslateMessage( &Message) ;

           DispatchMessage( &Message) ;

}

return Message.wParam;       //消息循環(huán)結(jié)束即程序終止時(shí)將信息返回系統(tǒng)

}

long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)

{

    HDC hDC;                   //定義指向設(shè)備的句柄

HBRUSH hBrush;     //定義指向畫刷的句柄

HPEN hPen;                 //定義指向畫筆的句柄

PAINTSTRUCT PtStr;//定義指向包含繪圖信息的結(jié)構(gòu)體變量

switch(iMessage)                                             //處理消息

{

case WM_PAINT:                                         //處理繪圖消息

           hDC=BeginPaint(hWnd,&PtStr);

           SetWindowOrgEx(hDC,-200,-200,NULL);       //設(shè)置映像模式

           hPen=CreatePen(PS_DASH,1,RGB(255,0,0));         //黑色畫筆

           SelectObject(hDC,hPen);       //選擇畫筆

           Polyline(hDC,lpSin,100);

    if(i<=25)                       //第一個(gè)1/4周期

{

  hPen=CreatePen(PS_DASH,1,RGB(255,0,0));

            

  hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0));

  lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//計(jì)算半徑

}

           else if(i<=50)

{

  hPen=CreatePen(PS_DASH,1,RGB(0,255,0));

            

  hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(0,255,0));

  lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//計(jì)算半徑

}

else if(i<=75)

{

  hPen=CreatePen(PS_DASH,1,RGB(0,0,255));

            

  hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(0,0,255));

  lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//計(jì)算半徑

}

else

{

  hPen=CreatePen(PS_DASH,1,RGB(255,255,0));

            

  hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,255,0));

  lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//計(jì)算半徑

}

SelectObject(hDC,hBrush);     //選擇畫刷

SelectObject(hDC,hPen);     

        lCentreX=lpSin[i].x;                  //圓心x坐標(biāo)

           lCentreY=lpSin[i].y;              //圓心y坐標(biāo)

           Ellipse(hDC,lCentreX-lRadious,lCentreY-lRadious,

                  lCentreX+lRadious,lCentreY+lRadious);   //畫圓

 

           i++;

           DeleteObject(hPen);               //刪除畫筆

           DeleteObject(hBrush);  //刪除畫刷

           EndPaint(hWnd,&PtStr);       //刪除設(shè)備環(huán)境指針

    Sleep(100);                    //0.1

           if(i<100) InvalidateRect(hWnd,NULL,1);         //刷新用戶區(qū)

           return 0;

case WM_DESTROY:          //關(guān)閉窗口

           PostQuitMessage(0);            

           return 0;

default:

         return(DefWindowProc(hWnd,iMessage,wParam,lParam));

                     }

}

程序運(yùn)行結(jié)果:

 

 

三、實(shí)驗(yàn)結(jié)果

   通過本次試驗(yàn)我了解了基于圖形應(yīng)用的程序設(shè)計(jì),掌握刷新技術(shù)及其應(yīng)用;學(xué)會(huì)了映射模式的應(yīng)用;并且基本了解了繪圖工具的使用;進(jìn)一步加深了對(duì)可視化的了解。

 

 

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多