計算機圖形學實驗--DDA演算法的實現
阿新 • • 發佈:2018-12-21
1. DDA演算法(數值微分法)原理:
1)網上或者計算機圖形學書本上有詳細介紹。
2)最核心的是選定(x2-x1)和(y2-y1)中較大者為步進方向。
2. 實現工具: 1) VS2017(C++) 2) 下載外掛:Easyx 。使用方法和下載見官網: [https://www.easyx.cn/]
3. 原始碼展示:
#include<iostream> #include<graphics.h> #include<math.h> #include<conio.h> using namespace std; void DDA(int x1, int y1, int x2, int y2) { int i, steps, dx, dy; int x0 = 400, y0 = 300; float x, y, delta_x, delta_y; dx = x2 - x1; dy = y2 - y1; if (abs(dx) >= abs(dy)) steps = abs(dx); else steps = abs(dy); delta_x = float(1.0*dx / steps); //讓結果為浮點數 delta_y = float(1.0*dy / steps); x = x1; y = y1; putpixel((x + x0), (y0 - y), RED); //畫第一個點 //cout << "("<<x << ","<<y <<")"<< endl; //輸出第一個點的文字資訊 Sleep(50); for (i = 1; i <= steps; i ++) { x = x + delta_x; y = y + delta_y; putpixel((x + x0), (y0 - int(y + 0.5)), RED); //cout <<"(" << x << ","<<int(y + 0.5) <<")"<< endl;//可以選擇輸出點來驗證結果 Sleep(50); //兩個點間隔50毫秒 } } int main() { int x1,x2,y1,y2; int x0=400, y0=300; //座標軸中心(x0,y0) cout << "請輸入兩個整數點的座標(x1,y1),(x2,y2)" << endl; cin >> x1 >> y1 >> x2 >> y2; initgraph(x0*2,y0*2); //初始化圖形視窗大小 line(0,y0,x0*2,y0); //座標軸X line(x0,0,x0,y0*2); //座標軸Y DDA(x1,y1,x2,y2); //DDA畫線演算法 _getch(); //等待一個任意輸入結束 closegraph(); //關閉圖形視窗 return 0; }
4. 結果展示:
1)輸出點座標驗證DDA演算法:鍵盤輸入13 20 -10 5(把相關圖形視窗的程式碼註釋掉然後加上輸出點的程式碼即可)
上課時老師給的DDA練習:
程式輸出截圖:
2)圖形化展示:(鍵盤輸入0 0 400 300)
5. 個人感悟:
1)DDA演算法上課的時候理解了,寫程式還是會有很多不容易發現的錯誤例如小數與整數之間轉換,困擾了很久。
2)剛開始下載VS的時候,執行hello world需要一分鐘,系統顯示一直在載入各種各樣的符號。
解決辦法:VS選單欄 工具>選項> 除錯>符號>取消Microsoft符號伺服器
3)畫圖環境就弄了一晚上,水平太菜,DDA演算法又是一晚上,效率不行。
4)第一次寫部落格,程式碼和排版有限,請大家多多指教。