MFC計算機圖形學(3)
阿新 • • 發佈:2019-02-10
之前我們已經可以畫出直線和曲線了。但是演算法雖容易理解,但是複雜度高,今天就介紹比較流行的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
最後點選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));
效果如下
打完收工。。。