電腦科學與技術學院
2012-2013學年第一學期
《計算機圖形學》實驗報告
實驗一:直線、圓的生成演算法
一、實驗目的與要求
(1)了解visual c++等程式設計環境中常用控制項命令與繪圖函式,初步掌握在實驗設計整合環境(ide)下進行圖形處理程式的設計方法。
(2)實現現直線dda、中點生成演算法、bresenham生成演算法;
(3)實現圓的中點生成演算法、bresenham生成演算法。
2、實驗內容
1.直線的生成演算法
(1)數值微分法(dda
將平面分成a、a、a、a、b、b、b、b八個區域。其中,a區域線段的斜率,b區域線段的斜率。dda演算法的基本思想就是利用線段方程(),當線段在a區域時,可將作為自變數,令;當線段在b區域時,可將作為自變數,令。
步驟一:記錄線段的起點及終點,並計算出直線的斜率;
步驟二:判斷值,若,則執行步驟三;若,則執行步驟四;
步驟三:記錄點,令,;
步驟四:記錄點,令,;
步驟五:根據的取值,重複執行步驟三或步驟四直至線段終點。
(2)中點畫線法
比較直線段與座標網格的交點和與其相鄰的兩畫素點中點的位置關係,若在上方,則下方畫素點離直線段更近,取點;若在下方,則上方畫素點離直線段更近,取點。中點畫線法的基本思想就是利用直線方程,每次將點座標帶入方程。若,則點**段上方;若,**上;若,**下方。
步驟一:記錄線段的起點及終點,設定浮點型變數,,,,,,其中,,,,,;
步驟二:判斷值,若,則令;若,則令,;
步驟三:記錄點,令,並重複步驟二直至線段終點。
(3)bresenham畫線法
此方法與中點畫線法的原理類似,即求直線與各垂直網格線的交點到下方畫素點的距離,進而選出最近的結點。
步驟一:記錄線段的起點及終點,設定浮點型變數,,,,,其中,,;
步驟二:判斷值,若,則令,;若,則令;
步驟三:記錄點,令,並重複步驟二直至線段終點。
2.圓的生成演算法
圓心位於原點的圓都有,,,四條對稱軸,已知圓上一點就可以畫出另外七個對應點,所以可以採用八分畫圓法。以下演算法均為掃瞄到順時針的圓弧。
(1)中點畫圓法
與直線的中點畫線法相類似,即為判斷兩畫素點中點與圓的位置關係。若在圓內,則取上方畫素點;若在圓外,則取下方畫素點。基本原理利用了圓的方程。
每次將點座標帶入方程。若,則點在圓外;若,在圓上;若,在圓內。
步驟一:記錄圓心座標以及半徑,設定浮點型變數,,,其中,,;
步驟二:判斷值,若,則令,,;若,則令,;
步驟三:記錄點,,,,,,,,並重複步驟二直至掃瞄完該圓弧。
(2)bresenham畫圓法
此演算法是分別計算圓與座標網格的交點和相鄰上下兩畫素點、的距離、,比較和的大小,進而確定選擇的畫素點。基本原理利用了圓的方程。判別式為。
步驟一:記錄圓心座標以及半徑,設定浮點型變數,,,其中,,;
步驟二:判斷值,若,則令,,;若,則令,;
步驟三:記錄點,,,,,,,,並重複步驟二直至掃瞄完該圓弧。
三、程式執行截圖
4、總結與除錯經驗
此次試驗主要是實現了dda演算法、中點生成演算法、bresenham演算法生成直線和中點生成演算法、bresenham演算法生成圓的基本圖形操作。在演算法上主要參考書本,然後自己實現程式。在vc++上自己的程式總是出現link錯誤,網上也是只提出此錯誤,並沒有給出解決辦法,後是換用vc2008執行成功。
計算機圖形學實驗報告
成都理工大學電腦科學與技術學院 一 所在系 數字 技術系 專業學生姓名 學號2012年月日 實驗一基本圖元的生成 一 實驗目的與實驗要求 1 目的與任務 學習並掌握圖形處理的數學模型和演算法。2 實驗基本要求 1 利用所學演算法原理 dda 中點畫線 bresenham 程式設計繪製生成直線,並比較...
圖形學附錄
一 數學基礎 1.向量運算 向量是一有向線段,具有方向和大小兩個引數。設有兩個向量v1 x1,y1,z1 v2 x2,y2,z2 1 向量的長度 2 數乘向量 3 兩個向量之和 4 兩個向量的點積 為兩向量之間的夾角。點積滿 換律和分配律 5 兩個向量的叉積 叉積滿足反交換律和分配律 2.矩陣運算 ...
計算機圖形學實習報告
實習報告 實習名稱 計算機圖形學實習 班級09021班 學號姓名 實習地點 5棟機房 實習指導教師 實習時間 2011年6月27日至 7月 10日遙感資訊工程學院 一 實習目的與意義 本次實習為集中實習,基於autocad2004平台與vc環境系統,製作二維和三維立體產品。通過對autocad200...