計算機圖形學學習心得_第1頁
計算機圖形學學習心得_第2頁
計算機圖形學學習心得_第3頁
計算機圖形學學習心得_第4頁
計算機圖形學學習心得_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、標準總結示范文本 | Excellent Model Text 資料編碼:CYKJ-FW-854編號:_計算機圖形學學習心得編輯:_日期:_單位:_計算機圖形學學習心得用戶指南:該總結資料適用于把階段時間里取得的成績、存在的問題及得到的經驗和教訓進行一次全面系統(tǒng)的總結,明確下一步的工作方向,少走彎路,少犯錯誤,提高工作效益作用。可通過修改使用,也可以直接沿用本模板進行快速編輯。一、實驗目的了解梁友棟算法和編碼裁剪算法并利用該算法思想實現某一圖形或直線段的裁剪,加深對梁友棟算法和編碼裁剪算法的理解。二、實驗內容利用梁友棟算法(參數化線段裁剪算法)或編碼裁剪算法變成實現對直線段或者任一圖形的裁剪。

2、三、實驗原理梁友棟算法簡介如下:設線段兩端點坐標分別為P1(x1,y1)和P2(x2,y2),則其參數化直線方程可寫成下列形式:0u1當u=0時,得點P1,當u=1時,得點P2。線段的裁剪條件可以由下面的不等式表示: Wxlx1uxWxr;Wyby1uyWyt這四個不等式可以表示為:upkqk k=1,2,3,4其中,參數p,q定義為:p1-x, q1x1Wxlp2x, q2Wxrx1p3-y, q3y1Wybp4y, q4Wyty1下標k=1,2,3,4分別對應裁剪窗口的左、右、下、上四條邊界線。如果線段平行于裁剪窗口的某兩邊界,則必有相應的pk0,如果還滿足qk0時,直線是從裁剪窗口第k條

3、邊界線的內部延伸到外部。當pk不等于零時,可以計算出線段與第k條裁剪窗口邊界線的交點參數: 根據定義,對于每條線段,pk中必有兩個小于零,而另兩個大于零。對于小于零的pk,直線同第k條裁剪窗口邊線是從外到內相遇的,此時如果線段同第k條裁剪窗口邊界線有交點的話,是參數u從0變大時遇到的,這時計算出相應的rk值,取0和各個rk值之中的最大值記為u1。與此相反,對于大于零的pk,計算出相應的rk值,取1和各個rk值之中的最小值記為u2。兩個參數u1和u2定義了在裁剪窗口內的線段部分。如果u1u2,則線段完全落在裁剪窗口之外,應被舍棄。否則被裁剪線段可見部分的端點由參數u1和u2計算出來。四、實驗環(huán)境

4、Windows XP VisualC+6.0五、實驗步驟進入VisualC+6.0環(huán)境,在菜單中選擇“FileNewProjects”,然后選擇“MFCAppWizard(exe)”新建一個工程文件單擊“OK”,在彈出的對話框中選擇“Single document”,單擊“Finish”,在VisualC+6.0編程界面中選擇CMyView單擊右鍵,選擇“Add Member Function”,在彈出的對話框中添寫“void”和函數名。/ 圖形裁減View.cpp : implementation of the CMyView class/#include stdafx.h#include

5、圖形裁減.h#include 圖形裁減Doc.h#include 圖形裁減View.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CMyViewIMPLEMENT_DYNCREATE(CMyView, CView)BEGIN_MESSAGE_MAP(CMyView, CView)/AFX_MSG_MAP(CMyView)/ NOTE - the ClassWizard will add and remove mapping macros here./ DO NO

6、T EDIT what you see in these blocks of generated code!/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP/ CMyView construction/destructionCMy

7、View:CMyView/ TODO: add construction code hereCMyView:CMyViewBOOL CMyView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CMyView drawingvoid CMyView:OnDraw(CDC* pDC)CMyDoc* pDoc = GetDocument;ASSERT_

8、VALID(pDoc);LINECLIP;/ TODO: add draw code for native data here/ CMyView printingBOOL CMyView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CMyView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid

9、 CMyView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printing/ CMyView diagnostics#ifdef _DEBUGvoid CMyView:AssertValid constCView:AssertValid;void CMyView:Dump(CDumpContext& dc) constCView:Dump(dc);CMyDoc* CMyView:GetDocument / non-debug version is inlineASSERT(m_pDo

10、cument-IsKindOf(RUNTIME_CLASS(CMyDoc);return (CMyDoc*)m_pDocument;#endif /_DEBUG/ CMyView message handlersvoid CMyView:LINECLIP/使用梁友棟-Basky直線裁剪算法CDC* pDC=GetDC;/取得繪圖設備環(huán)境上下文指針/設置不同顏色畫筆CPen newpen1(PS_SOLID,0,RGB(183,198,0);/窗口顏色CPen newpen2(PS_SOLID,0,RGB(0,0,1);/待裁剪線段顏色CPen newpen3(PS_SOLID,0,RGB(16

11、0,1,255);/裁剪后可見線段顏色/輔助變量float p4,q4,u4;float u1,u2,r4;int x1,y1,x2,y2,x0,y0,x3,y3;int dx,dy,k;int wxl=300,wxr=450,wyb=100,wyt=400;/繪制裁剪窗口pDC-SelectObject(&newpen1);pDC-Rectangle(wxl,wyt,wxr,wyb);x1=100;y1=200;x2=600;y2=400;/繪制被裁剪線段pDC-SelectObject(&newpen2);pDC-MoveTo(x1,y1);pDC-LineTo(x2,y2);/計算dx=

12、x2-x1;dy=y2-y1;p0=(float)-dx;p1=(float)dx;p2=(float)-dy;p3=(float)(dy);q0=(float)(x1-wxl);q1=(float)(wxr-x1);q2=(float)(y1-wyb);q3=(float)(wyt-y1);for(k=0;krk)?0:rk;/取用0與rk中的大值elseuk=(rku1)?uk:u1;/取用0與uk中的大值elseu2=(uk/滿足條件為可見部分線段if(u1SelectObject(&newpen3);pDC-MoveTo(x0,y0);pDC-LineTo(x3,y3);六、實驗結果與分析本圖中矩形內紫色線段為裁剪之后可見線段,外部的黑色線段部分為帶裁剪部分。七、實驗中遇到的問題及解決方法1.對于VisualC+6.0的工程文件即:MFC的環(huán)境不熟悉,開始時編寫視圖View下的程序在步驟上尚有困難,不知道該怎樣使用該環(huán)境,再參考了一些相關書籍和求教于其他人之后

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論