1. 程式人生 > >MFC計算機圖形學(3)

MFC計算機圖形學(3)

之前我們已經可以畫出直線和曲線了。但是演算法雖容易理解,但是複雜度高,今天就介紹比較流行的DDA畫線法,還有,對滑鼠進行事件有所響應,即,在畫板上,滑鼠左鍵單擊,移動至另外一個地方鬆開,此時在這兩個點之間畫一條線。

DDA畫線

演算法程式碼

void DDA_Line(int x1, int y1, int x2, int y2, int color)
{
    CDC *pDC = GetDC();//獲取裝置環境
    int  k,i; float x, y, dx, dy;
    k = abs(x2-x1);
    if (abs(y2-y1)>k) 
    {
        k = abs
(y2-y1); } dx = float(x2-x1)/k; dy = float(y2-y1)/k; x=x1; y=y1; for (i=0;i<k;i++) { pDC->SetPixel(x, y, color); x = x+dx; y = y+dy; } }

網上好多人畫圖解釋說明,這裡我就不說了。
下面就是處理滑鼠事件

滑鼠事件

我們先新增四個成員變數x1,y1,x2,y2表示線段端點座標
新增完如下圖
這裡寫圖片描述
在選單欄
view(檢視) –> 滑鼠事件 – >右邊Class name

選擇CXXXView(注:XXX為你的專案名)–>在Messages:找到WM_LBUTTONDOWN 雙擊或者先單擊,再在右邊選擇Add Function
最後點選Edit Code
如圖
這裡寫圖片描述

這是滑鼠單擊響應事件函式,我們編輯程式碼:

void OnLButtonDown(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default

    CView::OnLButtonDown(nFlags, point);
    x1 = point.x;
    y1 = point.y;
}

按照上面的方法步驟,繼續新增滑鼠左鍵鬆開的響應事件。
同時即可畫出線段。

void OnLButtonUp(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default

    CView::OnLButtonUp(nFlags, point);
    x2 = point.x;
    y2 = point.y;

    DDA_Line(x1,y1,x2,y2,RGB(255,0,0));
}

效果如下:
這裡寫圖片描述

下面,我們以所畫的線段為對角線,畫一個矩形。
這個也很簡單,自己畫個圖,就可以寫出程式碼

DDA_Line(x1,y1,x2,y1,RGB(0,255,0));
DDA_Line(x1,y1,x1,y2,RGB(0,255,0));
DDA_Line(x1,y2,x2,y2,RGB(0,255,0));
DDA_Line(x2,y1,x2,y2,RGB(0,255,0));

效果如下
這裡寫圖片描述

打完收工。。。