




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗一編程實現(xiàn)直線段的裁剪算法課程名稱:圖形學任課老師謝伙牛老師年級03級班級計算機(6)班姓名沈睿汀學號S030300833明倏博£孝調&去1、 實驗要求1、 裁剪算法選用Cohen-Sutherland算法;2、 界面設計友好、直觀。2、 實驗環(huán)境說明(1)本系統(tǒng)基于JAVA編程環(huán)境,使用JBuilderX作為相關的開發(fā)工具,因此系統(tǒng)的運行與其它用VC+開發(fā)的系統(tǒng)略有不同。(2) 在WINDOWS-XP下運行本程序的時候,請先安裝j2re-1_4_2_04-windows-i586-p.exe,然后,才能正常運行,windows環(huán)境下雙擊030300833Cutline.
2、exe。3、 算法與數據結構(程序設計)核心算法Cohen-Sutherland的編寫過程如下(在Sutherland.java文件中可以看到具體代碼):(1)新建一個類Sutherland,并在類在聲明一個構造函數Sutherland(intwyt,intwyb,intwxl,intwxr),傳遞矩形的四個邊界參數,并對類中的共有屬性進行初始化。(2)聲明一個端點編碼方法privatevoidcodingPoint(intx,inty,intp),根據書上的編碼規(guī)則對端點進行編碼。(3)聲明一個方法publicvoidsetPoint(intx1,inty1,intx2,inty2)來設置直
3、線段的兩端點坐標。(4)聲明兩個方法privateintOR(intop1,intop2)和privateintAND(intop1,int口op2)來分別實現(xiàn)編碼后的端點的相或和相與。并編寫一個方法isInWindow(intop)來判斷點op是否在窗口中。(5)編寫兩個方法privateintcaculateY(intx1,inty1,intx2,inty2,intx)和privateintcaculateX(intx1,inty1,intx2,inty2,inty)來分別求出未知的端點坐標,接著利用這兩個方法又編寫一個方法privatevoidcaculateCrossPoint(來對直
4、線段和相應的窗口邊界進行求交處理。(6)最后是利用上面編寫的各個方法來編寫主代碼publicvoidcutLine(),實現(xiàn)直線段的裁剪。(7)核心主代碼如下所示:/裁剪算法publicvoidcutLine()inttemp=0;while(true)codingPoint();/對直線端點進行編碼if(OR(p1,p2)=0)判斷p1|p2是否等于0out_x1=x1;out_y1=y1;out_x2=x2;out_y2=y2;break;elseif(AND(p1,p2)=1)/判斷p1&p2是否等于1out_x1=0;out_y1=0;out_x2=0;out_y2=0;bre
5、ak;elseif(AND(p1,p2)=0)/判斷p1&p2是否等于0if(isInWindow(pl)=0)/p1點是否在窗口里面,0表示在窗口里面temp=x1;x1=x2;x2=temp;temp=y1;y1=y2;y2=temp;codingPoint();/重新對端點進行編碼caculateCrossPoint()/求交四、實現(xiàn)功能說明(包括操作說明)備歡迎使用畤utK”工皿國法進行直線殿的載翦繪國區(qū)畫短拶畫直璃裁其喑廨如上圖所示,該軟件有四個按鈕和一個繪圖區(qū)。(1)用戶可以先點擊“畫矩形”按鈕,然后在繪圖區(qū)按住鼠標并拖動,便能繪制出一個用戶想要的矩形。(2)點擊“畫直線”
6、按鈕,然后在繪圖區(qū)的任意兩個位置分別用鼠標點擊一下(即確定直線的兩個端點),便可以繪制出一條用戶想要的直線。(3)點擊“裁剪”按鈕,便執(zhí)行裁剪算法,即進行直線段的裁剪,并會把裁剪的最終結果以圖形的形式反映在繪圖區(qū)上。(4)點擊“清屏”按鈕,可實現(xiàn)屏幕的清屏,方便用戶重新繪制矩形和直線段。下面是對某個例子的演示(1)分別點擊按鈕“畫矩形”和“畫直線”,然后繪制出如圖1所示的圖形圖1(2)點擊“裁剪”按鈕,便可執(zhí)行出如圖2所示的裁剪結果圖2四、實驗心得做本實驗的第一步當然是語言的選擇,我是選擇了JAVA語言來完成本實驗的編程實現(xiàn)。接著,在大概熟悉了JAVA語言的編程方法后,便開始著手于實驗的代碼實
7、現(xiàn)。在把Cohen-Sutherland算法流程搞清楚后,便根據書上的步驟一步步編下來。根據書本的步驟編寫Cohen-Sutherland算法,感覺思路很清晰,就是把代碼模塊化,盡量一個方法里面的代碼行數不要超過30行。這也方便以后的維護和修改。當怎么來驗證我這個算法的編寫是否正確呢?簡單的輸入幾個參數值,再看輸出結果,顯然不夠直觀。所以,便參閱了一些JAVA編程的書籍,比如JAVA語言與面向對象程序設計一清華大學出版社,JAVA參考大全之類的書籍。主要是看圖形繪制部分和響應鼠標事件的代碼實現(xiàn)。例題代碼看懂了,以為模仿一下就可以實現(xiàn)我的實驗目的了。但是,事情卻未能一蹴而就。(1)鼠標位置的定位
8、問題,這個問題我花了兩個下午加一個晚上才解決掉。我是在容器contentPane里面添加了一個容器jPanel_Graphics,并打算把jPanel_Graphics當作我的繪圖區(qū),問題就這么出現(xiàn)了:每次我在位置A點擊鼠標,可畫出的點卻是在位置B,不管怎么修改代碼,就是不能實現(xiàn)鼠標的準確定位,我的一個同學也是用JAVA編程的,但他是新建JAVAAPPLET程序(我是新建JAVAAPPLICATION程序),他不會出現(xiàn)我的這個見鬼的問題。反正就是折騰了好久,還上網查了很多相關的資料,但就是沒看到有用的信息。后來,我只好試著人為在代碼里面修改畫點的位置,就是準備畫的點的X坐標=從鼠標點擊事件得到
9、的e.getX()+4,Y坐標=從鼠標點擊事件得到的e.getY()+31,4和31是我慢滿調試出來的,從視覺效果上看,基本實現(xiàn)了鼠標的準確定位。這個問題真的是讓我郁悶了好久,剛開始還以為實驗做不下去了,因為如果你連鼠標的準確定位都實現(xiàn)不了,接下去的畫矩形和把裁剪結果用圖形的方式顯示出來,根本就無從談起?。?2)鼠標位置的定位問題解決了,接著是怎么來保存我畫的直線的端點,顯然,用數組是不行,因為你無法預知究竟用戶會畫幾條直線。最后找到了一個庫中本來就支持的Point類和Vector類。用它來記錄端點坐標。( 3)至于拖動鼠標畫出矩形,是參考了JAVA完美經典江義華,林彩榆,沒什么大問題出現(xiàn)。(
10、 4)又一個嚴峻問題出現(xiàn)了,那就是屏幕的清屏(刷新)。我同學是利用畫一個跟屏幕背景一樣顏色的矩形來實現(xiàn)清屏的,我總覺得不是很好,后來,真的是偶然,發(fā)現(xiàn)了super.update(噠個方法,簡單的調用一下這個方法,便很好的實現(xiàn)了清屏目的。( 6)在搞定了這些大大小小的問題后,我便調用我剛開始寫的那個Cohen-Sutherland算法,看看是否正確。運行了一下,無法實現(xiàn)裁剪。由于JBuilderX這個環(huán)境我還不知道如何進行單步調試,所以只好利用System.out.println()這個方法輸出一些中間結果來判斷是哪里出錯。也是調試了好久,最后才找到病原,其實,這個病原并不大,就是課本提供的對端點的編碼規(guī)則那里,是把原點定在左下角,但是,正如我們大家都知道,卻容易忽視的顯示屏幕的原點是位于左上角的!就是這個問題,影響了我結果的正確輸出。( 7)修改了相關的代碼后,裁剪結果正確顯示輸出了,這確實令人為之振奮。但當我點擊清屏按鈕,重新畫直線時,編譯環(huán)境發(fā)出警告提示我NullPointerException,真是一波三折,真是快崩潰了,又出什么問題了?經過仔細的檢查后,才發(fā)現(xiàn)是Vector類出問題了,執(zhí)行向Vcotr增加元素和刪除元素操作時,沒把握好指針位置。以上,大概就是我
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度出租車租賃與智能調度合同范本
- 二零二五年度電子合同在新能源領域的應用與環(huán)保法規(guī)
- 2025版建筑電氣設計合同范本
- 二零二五年度高品質紅磚建筑工程承包合同
- 2025版企業(yè)數字化轉型戰(zhàn)略規(guī)劃與實施商務咨詢合同范本
- 2025房屋修繕與室內空氣質量檢測服務協(xié)議
- 2025版房雅與張偉雙方自愿離婚協(xié)議
- 二零二五版醫(yī)療器械銷售合同
- 二零二五年度房產租賃代理合同模板
- 二零二五年度股東合作投資旅游度假區(qū)協(xié)議書
- 水質分析 題庫及答案
- 2025-2030中國消費電子產業(yè)創(chuàng)新趨勢及市場需求與投資回報分析報告
- 卵巢囊腫個案護理
- (正式版)SHT 3046-2024 石油化工立式圓筒形鋼制焊接儲罐設計規(guī)范
- GB/T 15622-2023液壓缸試驗方法
- 純化水系統(tǒng)再驗證方案E
- 5立方米液化石油氣儲罐課程設計說明書
- 完工情況說明-
- 臨床技術操作規(guī)范_骨科學分冊資料全
- 華為內部虛擬股管理暫行條例
- 集裝箱箱主代碼
評論
0/150
提交評論