




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精品文檔四、線(xiàn)段裁剪%Sutherland_Test.m 文件,主文件函數(shù)clear all;clc;MainMenu();%check_callback.m 文件,查看圖形函數(shù)function check_callback()%查看原始線(xiàn)段圖形回調(diào)函數(shù)%lines 矩陣共四列,每一列的含義如下:% 端點(diǎn) A x 坐標(biāo) 端點(diǎn) A y 坐標(biāo) 端點(diǎn) B x 坐標(biāo) 端點(diǎn) B y 坐標(biāo)%lines=getappdata(0,lines);if isempty(lines)errordlg( 當(dāng)前尚未生成線(xiàn)段,無(wú)法顯示! );return;endfigure();hold on;for i=1:leng
2、th(lines(:,1)plot(lines(i,1,3),lines(i,2,4);end hold off;end%Cohen_Sutherland.m 文件,編碼裁剪算法function Lines=Cohen_Sutherland(line,Rectangle)%編碼裁剪算法%line 為線(xiàn)段端點(diǎn)矩陣 ,共四列,其數(shù)據(jù)含義如下:% 端點(diǎn) A x 坐標(biāo) 端點(diǎn) A y 坐標(biāo) 端點(diǎn) B x 坐標(biāo) 端點(diǎn) B y 坐標(biāo)%Rectangle 為窗口邊界值,共四個(gè)元素,其含義分別為 Xwl,Xwr,Ywb,Ywt 。%首先檢測(cè)參數(shù)是否合法row column=size(line);if colum
3、n4|length(Rectangle)4Lines=;fprintf( 參數(shù)不合法不合法 );return ;end%P2 的編碼%程序中主要變量說(shuō)明%code 為線(xiàn)段端點(diǎn)的編碼矩陣, 兩行四列, 第一行為點(diǎn) P1 的編碼,第二行為點(diǎn)% 四列的含義為: D0,D1,D2,D3% 依次處理 line 的各個(gè)線(xiàn)段k=0;Lines=;for i=1:length(line(:,1)% 取出第 i 條線(xiàn)段P1=line(i,1,2);P2=line(i,3,4);%計(jì)算斜率PP=P1-P2;if PP(1)=0k=inf;elsek=PP(2)/PP(1);endfinished=false;wh
4、ile(finished)% 對(duì)點(diǎn) P1 和 P2 進(jìn)行編碼code=P1(1)Rectangle(2),P1(2)Rectangle(4);P2(1)Rectangle(2),P2(2)Rectangle(4);% P1,P2,k,code%進(jìn)行簡(jiǎn)取或簡(jiǎn)棄的判斷test=code(1,:)|code(2,:);%判斷是否簡(jiǎn)取if isempty(find(test0,1)Lines=Lines;P1,P2;finished=true;end%若當(dāng)前線(xiàn)段處理完成,則退出if finishedbreak;end%判斷是否簡(jiǎn)棄test=code(1,:)&code(2,:);if isempty(
5、find(test0, 1)finished=true;endif finishedbreak;end% 確保 P1 在窗口之外if isempty(find(code(1,:)0,1)% 交換 P1,P2 的坐標(biāo)值和編碼PT=P1;P1=P2;P2=PT;PT=code(1,:);code(1,:)=code(2,:);code(2,:)=PT;end% 從低位開(kāi)始找編碼值為 1 的地方D=find(code(1,:)0,1);if D0,1);else%若線(xiàn)段是斜線(xiàn) ,則計(jì)算 y 值, x 值變?yōu)榇翱诘淖筮吔缁蛴疫吔鏟1=Rectangle(D),P1(2)+k*(Rectangle(D)
6、-P1(1);endelse% 此時(shí) P1 位于窗口的上方或下方if k=inf%若線(xiàn)段是豎直線(xiàn) ,則 x 不變, y 變?yōu)榇翱诘纳线吔缁蛳逻吔? 且此時(shí) k 不會(huì)等于 0, 否則線(xiàn)段將處于簡(jiǎn)棄狀態(tài)。P1(2)=Rectangle(D);隨意編輯else%若線(xiàn)段是斜線(xiàn) ,則計(jì)算 x 值, y 值變?yōu)榇翱诘纳线吔缁蛳逻吔纭?P1=P1(1)+(Rectangle(D)-P1(2)/k,Rectangle(D); endend% 對(duì) P1 和 P2 重新編碼,再次計(jì)算。% P1,P2,k,code% pause(10);% scanf(D,%d);% inputdlg();endend%對(duì)最終點(diǎn)進(jìn)
7、行取整運(yùn)算%Lines=round(Lines);end%DrawOriginalGraph.m 文件,繪制原始線(xiàn)段圖形函數(shù)function DrawOriginalGraph()%繪制原始線(xiàn)段圖形函數(shù)%lines 矩陣共四列,每一列的含義如下:% 端點(diǎn) A x 坐標(biāo) 端點(diǎn) A y 坐標(biāo) 端點(diǎn) B x 坐標(biāo) 端點(diǎn) B y 坐標(biāo)% lines=getappdata(0,lines);if isempty(lines)errordlg( 當(dāng)前尚未生成線(xiàn)段,無(wú)法顯示! );return;endfigure(name, 原始線(xiàn)段圖形 );hold on;for i=1:length(lines(:,1
8、)plot(lines(i,1,3),lines(i,2,4);endhold off;end%DrawSutherlandGraph.m 文件,繪制編碼裁剪算法裁剪后線(xiàn)段函數(shù)function DrawSutherlandGraph(OriginalLines,Rectangle,SutherlandedLines) %繪制裁剪前后線(xiàn)段對(duì)比圖%OriginalLines 是初始線(xiàn)段矩陣 ,Rectangle 是裁剪窗口參數(shù), SutherlandedLines 是裁剪 后的線(xiàn)段矩陣%OriginalLines 與 SutherlandedLines 分別有四列,每一列的參數(shù)定義相同,如下所示:
9、% 端點(diǎn) A x 坐標(biāo) 端點(diǎn) A y 坐標(biāo) 端點(diǎn) B x 坐標(biāo) 端點(diǎn) B y 坐標(biāo)%Rectangle 共四個(gè)元素,每個(gè)元素的定義分別為 Xwl,Xwr,Ywb,Ywt 。 figure(name, 線(xiàn)段原始圖形與裁剪后的對(duì)比圖 );%在第一個(gè)小圖里繪制原始線(xiàn)段圖形以及裁剪窗口 subplot(2,1,1);hold on;%繪制原始線(xiàn)段for i=1:length(OriginalLines(:,1)plot(OriginalLines(i,1,3),OriginalLines(i,2,4);end%繪制裁剪窗口R=Rectangle;RLines=R(1),R(3),R(2),R(3);R
10、(2),R(3),R(2),R(4);R(2),R(4),R(1),R(4);R(1),R(4),R(1),R(3);for i=1:length(RLines(:,1)plot(RLines(i,1,3),RLines(i,2,4),-r);endhold off;%在第二個(gè)小圖里繪制裁剪后的圖形及裁剪窗口subplot(2,1,2);hold on;for i=1:length(SutherlandedLines(:,1)plot(SutherlandedLines(i,1,3),SutherlandedLines(i,2,4); end%繪制裁剪窗口for i=1:length(RLin
11、es(:,1)plot(RLines(i,1,3),RLines(i,2,4),-r);endhold off;end%generate_callback.m 文件,function generate_callback()%生成線(xiàn)段回調(diào)函數(shù)%prompt= 輸入線(xiàn)段條數(shù) , 線(xiàn)段端點(diǎn) x 坐標(biāo)最大值 , 線(xiàn)段端點(diǎn) y 坐標(biāo)最大值 ;% 設(shè)置提示字 符串title= 生成線(xiàn)段 ;% 設(shè)置標(biāo)題numline=1;% 指定輸入數(shù)據(jù)行數(shù)defdata=20,100,100;% 指定數(shù)據(jù)的默認(rèn)值Resize=on;% 設(shè)置對(duì)話(huà)框大小為可調(diào)節(jié)的answer=inputdlg(prompt,title,nu
12、mline,defdata,Resize);%若用戶(hù)點(diǎn)擊“取消”鍵,則直接退出if isempty(answer)return;end%將輸入對(duì)話(huà)框的輸入值轉(zhuǎn)化為浮點(diǎn)數(shù)data=str2num(char(answer);lines=GenerateLines(round(data(1),data(2),data(3);setappdata(0,lines,lines);answer=questdlg( 是否查看已生成的線(xiàn)段 , 提問(wèn)對(duì)話(huà)框 ,是,否 ,是 );%answer,strcmp(answer, 是 )if strcmp(answer, 是 )%繪制原始線(xiàn)段圖形DrawOriginal
13、Graph();endend%GenereateLines.m 文件,隨機(jī)生成線(xiàn)段函數(shù)function Lines=GenerateLines(count,MaxX,MaxY)% 隨機(jī)生成 count 條線(xiàn)段,以矩陣 Lines 返回。%MaxX 是線(xiàn)段端點(diǎn) x 坐標(biāo)的最大值, MaxY 是線(xiàn)段端點(diǎn) y 坐標(biāo)最大值%Lines 矩陣共四列,每一列的含義如下:% 端點(diǎn) A x 坐標(biāo) 端點(diǎn) A y 坐標(biāo) 端點(diǎn) B x 坐標(biāo) 端點(diǎn) B y 坐標(biāo)%line=rand(count,4);line(:,1,3)=rand(count,2)*MaxX;line(:,2,4)=rand(count,2)*Ma
14、xY;Lines=line;end%MainMenu.m 文件,這界面函數(shù)function MainMenu()%程序主菜單界面%leftbase=0;bottombase=-50;% 初始化線(xiàn)段矩陣 linessetappdata(0,lines,);figure();uicontrol(Style,pushbutton,string, 生 成 線(xiàn)段 ,position,200+leftbase350+bottombase 100 50,.callback,generate_callback);uicontrol(Style,pushbutton,string, 裁 剪,position,2
15、00+leftbase280+bottombase 100 50,.callback,sutherland_callback);uicontrol(Style,pushbutton,string,210+bottombase 100 50,.查看原始線(xiàn)段圖 形 ,position,200+leftbasecallback,check_callback);end%sutherland_callback.m 文件function sutherland_callback()%裁剪算法回調(diào)函數(shù)%lines=getappdata(0,lines);if isempty(lines)errordlg( 當(dāng)
16、前尚未生成線(xiàn)段! n 請(qǐng)先生成線(xiàn)段 , 錯(cuò)誤提示 );return;endwhile trueprompt= 窗口參數(shù) Xwl, 窗口參數(shù) Xwr, 窗口參數(shù) Ywb, 窗口參數(shù) Ywt;% 設(shè)置提示 字符串title= 窗口參數(shù) ;% 設(shè)置標(biāo)題numline=1;% 指定輸入數(shù)據(jù)行數(shù)defdata=0,1000,0,1000;% 指定數(shù)據(jù)的默認(rèn)值Resize=on;% 設(shè)置對(duì)話(huà)框大小為可調(diào)節(jié)的answer=inputdlg(prompt,title,numline,defdata,Resize);%若用戶(hù)點(diǎn)擊了“取消”鍵,則直接退出。if isempty(answer)return;enddata=str2num(char(answer);if data(1)data(2)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年消防工程師技術(shù)實(shí)務(wù)模擬試卷案例分析與解析
- 保育老師培訓(xùn)大綱
- 2025年人力資源管理師專(zhuān)業(yè)技能考核試卷:人力資源管理與組織效能試題
- 2025年小學(xué)二年級(jí)語(yǔ)文生字注音與組詞能力測(cè)試卷(全冊(cè)覆蓋)
- 2025年上海市閔行區(qū)六年級(jí)上學(xué)期期末數(shù)學(xué)考試卷(幾何圖形計(jì)算與數(shù)學(xué)思維拓展與應(yīng)用)
- 內(nèi)科護(hù)理胃炎講解
- 戒毒知識(shí)與康復(fù)指導(dǎo)
- 2025年注冊(cè)造價(jià)工程師案例分析模擬試卷及答案
- 貴州省黔西南州2020-2021學(xué)年高一下學(xué)期期末檢測(cè)試題(生物)
- 2025年考研數(shù)學(xué)(一)高等代數(shù)知識(shí)體系構(gòu)建與空間解析幾何問(wèn)題求解卷
- 難點(diǎn)02:總集篇·十六種陰影部分面積法專(zhuān)項(xiàng)練習(xí)-2024年小升初數(shù)學(xué)典型例題系列(解析版)2
- 2024年國(guó)家大劇院招聘真題
- 2025年四川省綿陽(yáng)市富樂(lè)學(xué)校中考模擬英語(yǔ)試題(含答案)
- 文化產(chǎn)業(yè)發(fā)展的試題及答案
- 2025年教育信息化2.0背景下教師跨學(xué)科教學(xué)能力培養(yǎng)模式創(chuàng)新與優(yōu)化
- 2025豬藍(lán)耳病防控及凈化指南(第三版)
- 2025-2030全球及中國(guó)協(xié)作機(jī)器人系統(tǒng)行業(yè)市場(chǎng)現(xiàn)狀供需分析及市場(chǎng)深度研究發(fā)展前景及規(guī)劃可行性分析研究報(bào)告
- 2025年全國(guó)保密教育線(xiàn)上培訓(xùn)考試試題庫(kù)含完整答案(各地真題)附答案詳解
- 財(cái)務(wù)公司調(diào)賬合同協(xié)議
- 2025-2030工業(yè)燃?xì)馊紵餍袠I(yè)市場(chǎng)現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評(píng)估規(guī)劃分析研究報(bào)告
- 配送公司車(chē)輛管理制度
評(píng)論
0/150
提交評(píng)論