[ 收藏 ] [ 繁体中文 ]  
臺灣貨到付款、ATM、超商、信用卡PAYPAL付款,4-7個工作日送達,999元臺幣免運費   在線留言 商品價格為新臺幣 
首頁 電影 連續劇 音樂 圖書 女裝 男裝 童裝 內衣 百貨家居 包包 女鞋 男鞋 童鞋 計算機周邊

商品搜索

 类 别:
 关键字:
    

商品分类

  •  管理

     一般管理学
     市场/营销
     会计
     金融/投资
     经管音像
     电子商务
     创业企业与企业家
     生产与运作管理
     商务沟通
     战略管理
     商业史传
     MBA
     管理信息系统
     工具书
     外文原版/影印版
     管理类职称考试
     WTO
     英文原版书-管理
  •  投资理财

     证券/股票
     投资指南
     理财技巧
     女性理财
     期货
     基金
     黄金投资
     外汇
     彩票
     保险
     购房置业
     纳税
     英文原版书-投资理财
  •  经济

     经济学理论
     经济通俗读物
     中国经济
     国际经济
     各部门经济
     经济史
     财政税收
     区域经济
     统计 审计
     贸易政策
     保险
     经济数学
     各流派经济学说
     经济法
     工具书
     通货膨胀
     财税外贸保险类考试
     英文原版书-经济
  •  社会科学

     语言文字
     社会学
     文化人类学/人口学
     新闻传播出版
     社会科学总论
     图书馆学/档案学
     经典名家作品集
     教育
     英文原版书-社会科学
  •  哲学

     哲学知识读物
     中国古代哲学
     世界哲学
     哲学与人生
     周易
     哲学理论
     伦理学
     哲学史
     美学
     中国近现代哲学
     逻辑学
     儒家
     道家
     思维科学
     马克思主义哲学
     经典作品及研究
     科学哲学
     教育哲学
     语言哲学
     比较哲学
  •  宗教

  •  心理学

  •  古籍

  •  文化

  •  历史

     历史普及读物
     中国史
     世界史
     文物考古
     史家名著
     历史地理
     史料典籍
     历史随笔
     逸闻野史
     地方史志
     史学理论
     民族史
     专业史
     英文原版书-历史
     口述史
  •  传记

  •  文学

  •  艺术

     摄影
     绘画
     小人书/连环画
     书法/篆刻
     艺术设计
     影视/媒体艺术
     音乐
     艺术理论
     收藏/鉴赏
     建筑艺术
     工艺美术
     世界各国艺术概况
     民间艺术
     雕塑
     戏剧艺术/舞台艺术
     艺术舞蹈
     艺术类考试
     人体艺术
     英文原版书-艺术
  •  青春文学

  •  文学

     中国现当代随笔
     文集
     中国古诗词
     外国随笔
     文学理论
     纪实文学
     文学评论与鉴赏
     中国现当代诗歌
     外国诗歌
     名家作品
     民间文学
     戏剧
     中国古代随笔
     文学类考试
     英文原版书-文学
  •  法律

     小说
     世界名著
     作品集
     中国古典小说
     四大名著
     中国当代小说
     外国小说
     科幻小说
     侦探/悬疑/推理
     情感
     魔幻小说
     社会
     武侠
     惊悚/恐怖
     历史
     影视小说
     官场小说
     职场小说
     中国近现代小说
     财经
     军事
  •  童书

  •  成功/励志

  •  政治

  •  军事

  •  科普读物

  •  计算机/网络

     程序设计
     移动开发
     人工智能
     办公软件
     数据库
     操作系统/系统开发
     网络与数据通信
     CAD CAM CAE
     计算机理论
     行业软件及应用
     项目管理 IT人文
     计算机考试认证
     图形处理 图形图像多媒体
     信息安全
     硬件
     项目管理IT人文
     网络与数据通信
     软件工程
     家庭与办公室用书
  •  建筑

  •  医学

     中医
     内科学
     其他临床医学
     外科学
     药学
     医技学
     妇产科学
     临床医学理论
     护理学
     基础医学
     预防医学/卫生学
     儿科学
     医学/药学考试
     医院管理
     其他医学读物
     医学工具书
  •  自然科学

     数学
     生物科学
     物理学
     天文学
     地球科学
     力学
     科技史
     化学
     总论
     自然科学类考试
     英文原版书-自然科学
  •  工业技术

     环境科学
     电子通信
     机械/仪表工业
     汽车与交通运输
     电工技术
     轻工业/手工业
     化学工业
     能源与动力工程
     航空/航天
     水利工程
     金属学与金属工艺
     一般工业技术
     原子能技术
     安全科学
     冶金工业
     矿业工程
     工具书/标准
     石油/天然气工业
     原版书
     武器工业
     英文原版书-工业技
  •  农业/林业

  •  外语

  •  考试

  •  教材

  •  工具书

  •  中小学用书

  •  中小学教科书

  •  动漫/幽默

  •  烹饪/美食

  •  时尚/美妆

  •  旅游/地图

  •  家庭/家居

  •  亲子/家教

  •  两性关系

  •  育儿/早教

     保健/养生
     体育/运动
     手工/DIY
     休闲/爱好
     英文原版书
     港台图书
     研究生
     工学
     公共课
     经济管理
     理学
     农学
     文法类
     医学
  • 計算機圖形學基礎教程(Visual C++版)習題解答與編程實踐(第2
    該商品所屬分類:研究生 -> 工學
    【市場價】
    540-784
    【優惠價】
    338-490
    【作者】 孔令德,康鳳娥 
    【所屬類別】 圖書  教材  研究生/本科/專科教材  工學 
    【出版社】清華大學出版社 
    【ISBN】9787302489474
    【折扣說明】一次購物滿999元台幣免運費+贈品
    一次購物滿2000元台幣95折+免運費+贈品
    一次購物滿3000元台幣92折+免運費+贈品
    一次購物滿4000元台幣88折+免運費+贈品
    【本期贈品】①優質無紡布環保袋,做工棒!②品牌簽字筆 ③品牌手帕紙巾
    版本正版全新電子版PDF檔
    您已选择: 正版全新
    溫馨提示:如果有多種選項,請先選擇再點擊加入購物車。
    *. 電子圖書價格是0.69折,例如了得網價格是100元,電子書pdf的價格則是69元。
    *. 購買電子書不支持貨到付款,購買時選擇atm或者超商、PayPal付款。付款後1-24小時內通過郵件傳輸給您。
    *. 如果收到的電子書不滿意,可以聯絡我們退款。謝謝。
    內容介紹



    開本:16開
    紙張:膠版紙
    包裝:平裝-膠訂

    是否套裝:否
    國際標準書號ISBN:9787302489474
    叢書名:高等學校計算機專業教材精選·圖形圖像與多媒體技術

    作者:孔令德,康鳳娥
    出版社:清華大學出版社
    出版時間:2019年03月 


        
        
    "
    編輯推薦
    本書完全由筆者使用Visual C 的MFC框架進行獨立編寫,針對每個原理都給出了案例實現。 
    內容簡介
    計算機圖形學是注重實踐的學科。對計算機專業的學生而言,學習圖形學的重點在於程序實現。本書基於Visual C 的MFC框架給出了《計算機圖形學基礎教程(Visual C 版)(第2版)》中所有習題的解答,重點完成了本書彩頁所展示的方塊踫撞模型、三維五角星、Mengeri海綿實體模型、雙三次Bezier曲面實體模型、球的雙點光源光照反走樣線框模型、立方體光照模型、圓環光照模型、球的Gouraud光強插值模型、球的Phong 法矢插值光照模型、球的函數紋理和圖片紋理等習題。
    本書由兩百多個計算機圖形學源程序組成,涵蓋了計算機圖形學的主要內容,是作者主持山西省精品資源共享課“計算機圖形學”多年的建設成果。作者一直致力於打造計算機圖形學課程的“紙介質教材 數字化教學資源庫 精品資源共享課”的優質教學資源。作者的個人網站(http://www.klingde.com)提供了本書的全部源程序代碼,可供讀者下載使用。
    目錄
    目錄
    第1章導論1
    一、 習題解答1
    二、 習題拓展6第2章MFC繪圖基礎8
    一、 習題解答8
    二、 習題拓展69第3章基本圖形的掃描轉換72
    一、 習題解答72
    二、 習題拓展127第4章多邊形填充131
    一、 習題解答131
    二、 習題拓展167第5章二維變換和裁剪170
    一、 習題解答170
    二、 習題拓展181第6章三維變換和投影184
    一、 習題解答184
    二、 習題拓展207第7章自由曲線曲面210目錄
    第1章導論1
    一、 習題解答1
    二、 習題拓展6第2章MFC繪圖基礎8
    一、 習題解答8
    二、 習題拓展69第3章基本圖形的掃描轉換72
    一、 習題解答72
    二、 習題拓展127第4章多邊形填充131
    一、 習題解答131
    二、 習題拓展167第5章二維變換和裁剪170
    一、 習題解答170
    二、 習題拓展181第6章三維變換和投影184
    一、 習題解答184
    二、 習題拓展207第7章自由曲線曲面210
    一、 習題解答210
    二、 習題拓展233第8章分形幾何235
    一、 習題解答235
    二、 習題拓展261第9章動態消隱264
    一、 習題解答264
    二、 習題拓展287第10章真實感圖形290
    一、 習題解答290
    二、 習題拓展336參考文獻339
    前言

    圖1立體相機照片
    圖2紅綠立體圖

    圖3螺旋立體雙圖
    圖4文字三維立體畫

    圖1立體相機照片
    圖2紅綠立體圖



    圖3螺旋立體雙圖
    圖4文字三維立體畫



    圖5矩形塊踫撞模擬
    圖6打磚塊遊戲



    圖7直線段的像素級繪制
    圖8顏色漸變直線段及其反走樣



    圖9動態旋轉雙三次B樣條曲面模型
    圖10搖曳的分形草模型
    圖11TwinDragon模型



    圖12孔雀樹模型
    圖13分形樹模型



    圖14雙三次Bezier網格曲面模型
    圖15立體動態三視圖模型



    圖16RGB加色模型
    圖17CMY減色模型



    圖18基於ZBuffer消隱的交叉條模型圖19基於ZBuffer消隱的交叉面模型圖20Sierpinski海綿的實體模型
    圖21恆定顏色和漸變顏色六邊形模型
    圖22三維五角星模型



    圖23立方體光照模型
    圖24立方體圖片紋理映射模型



    圖25圓環線框模型
    圖26圓環Gouraud明暗處理光照模型



    圖27圓環Phong 明暗處理光照模型
    圖28圓環圖片紋理映射無光照模型
    圖29圓環圖片紋理映射光照模型
    圖30圓環凹凸紋理映射光照模型



    圖31球的雙點光源光照反走樣線框模型
    圖32金屬球的雙點光源Gouraud光強插值模型



    圖33金屬球的雙點光源Phong 法矢插值模型
    圖34球的函數紋理映射光照模型



    圖35球的圖片紋理映射模型
    圖36使用OpenGL基於3DS模型繪制的足球



    圖37紅綠藍玻璃片圖38立方體的陰影模型

    出 版 說 明
    我國高等學校計算機教育近年來迅猛發展,應用所學計算機知識解決實際問題,已經成為當代大學生的能力。
    時代的進步與社會的發展對高等學校計算機教育的質量提出了更高、更新的要求。現在很多高等學校都在積極探索符合自身特點的教學模式,湧現出一大批非常優秀的精品課程。
    為了適應社會的需求,滿足計算機教育的發展需要,清華大學出版社在進行大量調查研究的基礎上,組織編寫了“高等學校計算機專業教材精選”。本套教材從全國各高校的優秀計算機教材中精挑細選了一批很有代表性且特色鮮明的計算機精品教材,把作者們對各自所授計算機課程的獨特理解和先進經驗給全國師生。
    本繫列教材的特點如下。
    (1) 編寫目的明確。本套教材主要面向廣大高校的計算機專業學生,使學生通過本套教材,學習計算機科學與技術方面的基本理論和基本知識,接受應用計算機解決實際問題的基本訓練。
    (2) 注重編寫理念。本套教材作者群為各高校相應課程的主講,有一定經驗積累且編寫思路清晰,有獨特的教學思路和指導思想,其教學經驗具有推廣價值。本套教材不乏各類精品課配套教材,力求把不同學校的教學特點反映到每本教材中。
    (3) 理論知識與實踐相結合。本套教材貫徹“從實踐中來,到實踐中去”的原則,教材中許多必須掌握的理論都將結合實例進行講解,注重培養學生分析問題、解決問題的能力,滿足社會用人要求。
    (4) 易教易用,合理適當。在本套教材編寫時,注意結合實際教學的課時數,努力把握教材的篇幅,對一些知識點按相關教學指導委員會的精神進行合理取舍與難易控制。
    (5) 注重教材的立體化配套。大多數教材都有配套的教學課件、習題解答、學生上機實驗指導、教學網站等輔助教學資源,方便教學。
    隨著本套教材的陸續出版,我們相信它能夠得到廣大讀者的認可和支持,為我國計算機教材建設及計算機教學水平的提高,為計算機教育事業的發展做出應有的貢獻。

    清華大學出版社第2版前言
    本書已經出版10年了,期間讀者一直在下載使用本書提供的習題解答資源,而筆者一直進行著計算機圖形學的實踐教學資源庫的建設,無暇抽身進行改版。2012年筆者主持的“計算機圖形學實踐教學資源庫的建設”項目建設完成,並被評為山西省教學成果一等獎。2013年,《計算機圖形學基礎教程(Visual C 版)》和《計算機圖形學實踐教程(Visual C 版)》的第2版正式出版發行。於是,開始對本書進行改版工作。
    本書的習題解答給出的是《計算機圖形學基礎教程(Visual C 版)》每章習題的答案及其源程序。基於“計算機圖形學實踐教學資源庫”,筆者對《計算機圖形學基礎教程(Visual C 版)(第2版)》的內容作了較大調整,在第1版的基礎上增加了柏拉圖多面體模型、簡單透明模型、簡單陰影模型、圖像紋理、幾何紋理等內容。相應地,《計算機圖形學實踐教程(Visual C 版)(第2版)》中的案例也由第1版的43個擴充為60個。因而,習題解答內容也需要進行相應更新。根據主教材內容的變動,重新編寫了第1~3章,其餘章節則是做了一些變量的命名的統一或更新。本書不僅給出了全部習題的解答,還在每章後面給出了習題拓展。本書的全部源程序提供在筆者的個人網站(http://www.klingde.com)上,程序經過了嚴格的測試,在Visual C 6.0環境下,編譯後就可運行。另外,本書習題拓展部分給出的是可執行文件。如果本書讀者是計算機圖形學教師,可以通過QQ聯繫作者獲得拓展部分的源程序。這樣做的目的是希望學生們能夠根據可執行文件運行效果,獨立開發拓展程序。
    2014年,《計算機圖形學基礎教程(Visual C 版)》《計算機圖形學實踐教程(Visual C 版)》《計算機圖形學基礎教程(Visual C 版)習題解答與編程實踐》《計算機圖形學實驗及課程設計(Visual C 版)》一套4本教材被列為“十二五”普通高等教育本科規劃教材。2015年,《計算機圖形學基礎教程(Visual C 版)》獲得“第四屆”中國大學出版社優秀教材一等獎。
    本書的第1~4章由康鳳娥完成,第5~10章由孔令德完成,全書由孔令德統稿。敬請教學一線的計算機圖形教師繼續提出寶貴的意見和建議。筆者的Email:klingde@163.com,QQ: 997796978。為了更好地服務於國內的計算機圖形學教師,作者建立了“計算機圖形學教師QQ群”(群號:159410090)。熱忱歡迎計算機圖形學教師加入,對教學中的疑難問題,作者將提供在線服務。

    孔令德2018年12月第1版前言
    由筆者編寫的《計算機圖形學基礎教程(Visual C 版)》和《計算機圖形學實踐教程(Visual C 版)》自出版以來受到了讀者的厚愛。許多讀者訪問了筆者負責的省級精品課程網站,下載了相關的配套教學資源。讀者普遍反映:《計算機圖形學基礎教程(Visual C 版)》是從計算機編程的角度來講解圖形學的內容,內容簡明扼要,重點突出,又很重視實踐,非常適合學時較少的課程教學。同時讀者也提出:《計算機圖形學基礎教程(Visual C 版)》的每章後面都設計了很有價值的習題,尤其是其中的編程題很有水平,希望提供每章習題中的編程題的源代碼。為此,筆者編寫了本書,同時在筆者的個人網站(http://www.klingde.com)提供了所有習題解答的源程序代碼供讀者免費下載。這些代碼都經過了認真調試,可以在Visual C 6.0環境中直接運行,建議顯示分辨率為1024×768。
    計算機圖形學的主要內容是講解圖形的生成原理及算法,重點在於圖形生成原理的編程實現。筆者一直認為,圖形學的生成原理固然重要,但編程實現乃是重中之重。圖形學原理是任何計算機圖形學教材上都可以查找到的,但是實現該原理的程序就很難得了。VisualC 是圖形圖像處理領域的開發工具,筆者使用MFC課件進行程序開發。在完成習題的同時,以自定義類的方式逐步搭建了三維真實感圖形繪制場景。類定義包括點類(二維點、三維點)、直線類(走樣直線、反走樣直線及顏色漸變直線)、RGB顏色類、矢量類、填充類(恆定顏色填充和漸變顏色填充)、投影變換類(平行投影、透視投影)、光照類(材質、光源)、紋理類(函數紋理和圖片紋理)、實體類(頂點表和面表)等。編程時隻要在場景中根據三維實體的幾何模型修改頂點表和面表數據結構,就可以渲染出任意三維物體的真實感光照模型。
    《計算機圖形學基礎教程(Visual C 版)》中每章的習題都經過了精心設計,是本章知識及其前述章節內容的綜合應用。筆者繼續秉承主教材的“講解注釋清晰、各章內容前後銜接自然,終引導讀者完成真實感光照模型繪制”的理念,在習題集中實現了方塊踫撞模型、三維五角星、Menger海綿實體模型、動態旋轉雙三次Bezier曲面實體模型、圓環光照模型、金屬球Phong明暗處理、球的紋理映射和貼圖等內容。本書是《計算機圖形學基礎教程(Visual C 版)》教材內容的進一步提升,通過本習題集的學習,讀者可以在更高層次上理解計算機圖形學的原理。本書中標注的習題,實用性很強,但是編程難度較大,讀者可以根據自身情況選擇學習。
    使用MFC開發的程序代碼多而且有許多框架代碼,受篇幅限制,本書不可能把所有代碼納入,建議學習時,應下載本習題集提供的源程序理解。
    感謝讀者對《計算機圖形學基礎教程(Visual C 版)》的大力支持。讀者的熱情和鼓勵,讓筆者始終覺得重任在肩,所以這次專門將主教材中的習題整理出版,也是不想有負於讀者的期望。雖然習題部分在主教材出版時已經全部開發完畢,但編寫本書仍花費了大量的時間,主要工作是添加了部分拓展性的習題,源程序總數超過200個。
    本書的第1~4章由康鳳娥完成,第5~10章由孔令德完成,全書由孔令德統稿。
    希望讀者一如既往地為本書提出寶貴意見,共同為我國圖形學軟件事業的發展做好底層開發工作。作者的Email:klingde@163.com。


    孔令德2009年6月
    在線試讀
    第5章二維變換和裁剪
    一、 習題解答
    1. 如圖51所示,求A(4,1)、B(7,3)、C(7,7)和D(1,4)構成的四邊形繞 Q(5,4)逆時針旋轉45°的變換矩陣和變換後圖形的頂點坐標。圖51四邊形旋轉

    【解】這是一個復合變換: 首先將參考點Q平移到坐標原點,對坐標原點進行逆時針旋轉變換,然後再將參考點Q平移回原位置。
    (1) 平移: 將參考點Q(5,4)平移至坐標原點(0,0),變換矩陣為T1。T1=100
    010
    -5-41(2) 旋轉: 圖形繞坐標原點逆時針旋轉45°,變換矩陣為T2。T2=cos π4sin π40
    -sin π4cos π40
    001(3) 反平移: 將參考點Q從坐標原點平移回原處(5,4),變換矩陣為T3。T3=100
    010
    541(4) 總變換矩陣: T=T1·T2·T3。T=100
    010
    -5-41·cos π4sin π40
    -sin π4cos π40
    001·100
    010
    541=22220
    -22221第5章二維變換和裁剪
    一、 習題解答
    1. 如圖51所示,求A(4,1)、B(7,3)、C(7,7)和D(1,4)構成的四邊形繞 Q(5,4)逆時針旋轉45°的變換矩陣和變換後圖形的頂點坐標。圖51四邊形旋轉

    【解】這是一個復合變換: 首先將參考點Q平移到坐標原點,對坐標原點進行逆時針旋轉變換,然後再將參考點Q平移回原位置。
    (1) 平移: 將參考點Q(5,4)平移至坐標原點(0,0),變換矩陣為T1。T1=100
    010
    -5-41(2) 旋轉: 圖形繞坐標原點逆時針旋轉45°,變換矩陣為T2。T2=cos π4sin π40
    -sin π4cos π40
    001(3) 反平移: 將參考點Q從坐標原點平移回原處(5,4),變換矩陣為T3。T3=100
    010
    541(4) 總變換矩陣: T=T1·T2·T3。T=100
    010
    -5-41·cos π4sin π40
    -sin π4cos π40
    001·100
    010
    541=22220
    -22221
    5-224-9221(5) 變換前四邊形ABCD頂點的齊次矩陣為P。P=411
    731
    771
    141(6) 變換後四邊形頂點ABCD的齊次矩陣P′。P′=P·T=411
    731
    771
    141·22220
    -22221
    5-224-9221=5 24-221
    5 3224 221
    5-224 5221
    5-224-221(7) 變換後的四邊形頂點ABCD坐標為 A′(6.4,1.2),B′(7.1,4.7),C′(4.3,7.5),D′(2.2,1.2)。2. 屏幕客戶區xOy坐標繫的原點位於左上角,x軸水平向右,值為MaxX,y軸垂直向下,值為MaxY。建立新坐圖52坐標繫變換
    標繫x′O′y′,原點位於屏幕客戶區中心(MaxX/2,MaxY/2),x′軸水平向右,y′軸垂直向上,如圖52所示。要求用變換矩陣求解這兩個坐標繫之間的相互關繫。
    【解】在屏幕上繪制圖形時,常使用自定義坐標繫,原點位於屏幕中心(MaxX/2,MaxY/2),x′軸水平向右,y′軸垂直向上。實現語句為 pDC->SetMapMode(MM_ANISOTROPIC);//自定義坐標繫
    pDC->SetWindowExt(Rect.Width(),Rect.Height());
    pDC->SetViewportExt(Rect.Width(),-Rect.Height());//x軸水平向右,y軸垂直向上
    pDC->SetViewportOrg(Rect.Width()/2,Rect.Height()/2);//屏幕中心為原點本題給出自定義坐標繫和屏幕設備坐標繫之間的變換關繫。    
    (1) 將xOy坐標繫原點平移到(MaxX/2,MaxY/2)處,形成x′O′y′坐標繫。由於坐標繫沿坐標軸的正向移動等同於相應圖形沿坐標軸負向移動,變換矩陣T1為T1=100
    010
    -MaxX2-MaxY21(2) 將y關於x軸做反射變換,由於坐標繫對x軸的反射變換等同於相應圖形對x軸的反射變換,變換矩陣T2為T2=100
    0-10
    001(3) 變換矩陣T=T1·T2T=100
    0-10
    -MaxX2MaxY213. 建立坐標繫xOy,原點位於屏幕客戶區中心,x軸水平向右,y軸垂直向上。在原點正下方(0,-b)點,懸掛一邊長為ab>2a2的正方形,如圖53所示。要求正方形繞自身中心(0,-b)點逆時針旋轉。編程實現二維復合旋轉變換。
    圖53復合旋轉變換
    【解】本題要求編程實現二維復合旋轉變換。通過映射模式函數可知,屏幕坐標繫的原點位於屏幕中心(MaxX/2,MaxY/2),x軸水平向右,y軸垂直向上。二維變換矩陣可以使用數組T\\[3\\]\\[3\\]來實現。二維復合旋轉變換分為3步完成。平移變換、旋轉變換和反平移變換。本題的二維復合旋轉實現是通過動畫按鈕調用SetTimer函數和KillTimer函數完成的。SetTimer函數啟動定時器,KillTimer函數關閉定時器。
    (1) 讀入正方形頂點坐標函數。void CTestView::ReadPoint()
    {
    a=100,b=200;
    POld\\[0\\]\\[0\\]=-a/2;POld\\[0\\]\\[1\\]=-(b-a/2);POld\\[0\\]\\[2\\]=1;//正方形頂點齊次坐標
    POld\\[1\\]\\[0\\]=-a/2;POld\\[1\\]\\[1\\]=-(b a/2);POld\\[1\\]\\[2\\]=1;
    POld\\[2\\]\\[0\\]=a/2;POld\\[2\\]\\[1\\]=-(b a/2);POld\\[2\\]\\[2\\]=1;
    POld\\[3\\]\\[0\\]=a/2;POld\\[3\\]\\[1\\]=-(b-a/2);POld\\[3\\]\\[2\\]=1;
    }(2) 繪制多邊形函數。void CTestView::DrawPolygon(CDCpDC,double p\\[\\]\\[3\\])//繪制多邊形函數
    {
    double Tempx,Tempy;
    for(int i=0;i<4;i )
    {
    if(i==0)
    {
    pDC->MoveTo(ROUND(p\\[i\\]\\[0\\]),ROUND(p\\[i\\]\\[1\\]));
    Tempx=p\\[i\\]\\[0\\];Tempy=p\\[i\\]\\[1\\];
    }
    else
    pDC->LineTo(ROUND(p\\[i\\]\\[0\\]),ROUND(p\\[i\\]\\[1\\]));
    }
    pDC->LineTo(ROUND(Tempx),ROUND(Tempy));
    }(3) 雙緩衝函數。void CTestView::DoubleBuffer()//雙緩衝函數
    {
    double Tx=0,Ty=b;
    //平移變換矩陣
    T1\\[0\\]\\[0\\]=1;T1\\[0\\]\\[1\\]=0;T1\\[0\\]\\[2\\]=0;
    T1\\[1\\]\\[0\\]=0;T1\\[1\\]\\[1\\]=1;T1\\[1\\]\\[2\\]=0;
    T1\\[2\\]\\[0\\]=-Tx;T1\\[2\\]\\[1\\]=Ty;T1\\[2\\]\\[2\\]=1;
    //逆時針自轉變換矩陣
    T2\\[0\\]\\[0\\]=cos(betaPI/180);T2\\[0\\]\\[1\\]=sin(betaPI/180);T2\\[0\\]\\[2\\]=0;
    T2\\[1\\]\\[0\\]=-sin(betaPI/180);T2\\[1\\]\\[1\\]=cos(betaPI/180);T2\\[1\\]\\[2\\]=0;
    T2\\[2\\]\\[0\\]=0;T2\\[2\\]\\[1\\]=0;T2\\[2\\]\\[2\\]=1;
    //反平移變換矩陣
    T3\\[0\\]\\[0\\]=1;T3\\[0\\]\\[1\\]=0;T3\\[0\\]\\[2\\]=0;
    T3\\[1\\]\\[0\\]=0;T3\\[1\\]\\[1\\]=1;T3\\[1\\]\\[2\\]=0;
    T3\\[2\\]\\[0\\]=Tx;T3\\[2\\]\\[1\\]=-Ty;T3\\[2\\]\\[2\\]=1;
    MultiMatrix(POld,T1);
    MultiMatrix(POld,T2);
    MultiMatrix(POld,T3);
    CDCpDC=GetDC();//客戶區DC
    GetMaxX();GetMaxY();
    pDC->SetMapMode(MM_ANISOTROPIC);//自定義坐標繫
    pDC->SetWindowExt(MaxX,MaxY);
    pDC->SetViewportExt(MaxX,-MaxY);//x軸向右,y軸向上
    pDC->SetViewportOrg(MaxX/2,MaxY/2);//屏幕中心為原點
    CDC MemDC,Picture;
    MemDC.CreateCompatibleDC(pDC);
    MemDC.SetMapMode(MM_ANISOTROPIC);
    MemDC.SetWindowExt(MaxX,MaxY);
    MemDC.SetViewportExt(MaxX,-MaxY);
    MemDC.SetViewportOrg(MaxX/2,MaxY/2);
    CBitmap NewBitmap,OldBitmap;
    NewBitmap.LoadBitmap(IDB_BITMAP2);
    OldBitmap=MemDC.SelectObject(&NewBitmap);
    MemDC.BitBlt(-MaxX/2,-MaxY/2,MaxX,MaxY,&Picture,-MaxX/2,-MaxY/2,SRCCOPY);
    DrawCoor(&MemDC);
    DrawPolygon(&MemDC,POld);
    pDC->BitBlt(-MaxX/2,-MaxY/2,MaxX,MaxY,&MemDC,-MaxX/2,-MaxY/2,SRCCOPY);
    ReleaseDC(pDC);
    MemDC.SelectObject(OldBitmap);
    NewBitmap.DeleteObject();
    }(4) 矩陣相乘函數。void CTestView::MultiMatrix(double P0\\[\\]\\[3\\],double T\\[3\\]\\[3\\])//矩陣相乘函數
    {
    int i,j;
    for(i=0;i<4;i )
    for(j=0;j<3;j )
    Pnew\\[i\\]\\[j\\]=P0\\[i\\]\\[0\\]T\\[0\\]\\[j\\] P0\\[i\\]\\[1\\]T\\[1\\]\\[j\\] P0\\[i\\]\\[2\\]T\\[2\\]\\[j\\];
    for(i=0;i<4;i )
    {
    for(j=0;j<3;j )
    Pold\\[i\\]\\[j\\]=Pnew\\[i\\]\\[j\\];
    }
    }(5) 繪制坐標繫函數。void CTestView::DrawCoor(CDCpDC)
    {
    Cpen NewPen,OldPen;
    NewPen.CreatePen(PS_SOLID,3,RGB(128,128,128));
    OldPen=pDC->SelectObject(&NewPen);
    pDC->MoveTo(-100,0);
    pDC->LineTo(100,0);
    pDC->MoveTo(0,0);
    pDC->LineTo(0,-b);
    pDC->SelectObject(OldPen);
    NewPen.DeleteObject();
    }(6) 動畫菜單映射函數。void CTestView:: OnMENUPlay ()//菜單映射函數
    {
    //TODO: Add your command handler code here
    Play=Play?FALSE:TRUE;
    if (Play)//設置動畫的時間步
    SetTimer(1,15,NULL);
    else
    KillTimer(1);
    }(7) 定時器消息映射函數。void CTestView::OnTimer(UINT nIDEvent)
    {
    //TODO: Add your message handler code here and/or call default
    beta=10;
    DoubleBuffer();
    CView::OnTimer(nIDEvent);
    }(8) 動畫按鈕狀態映射函數。void CTestView::OnUpdateMENUPlay(CCmdUIpCmdUI)
    {
    //TODO: Add your command update UI handler code here
    if(Play)
    {
    pCmdUI->SetCheck(TRUE);
    pCmdUI->SetText("停止動畫");
    }
    else
    {
    pCmdUI->SetCheck(FALSE);
    pCmdUI->SetText("播放動畫");
    }
    }4. 有兩個點P1(0,2),P2(3,3)用CohenSutherland直線段編碼裁剪算法裁剪線段P1P2,裁剪窗口為wxl=1,wxr=6,wyb=1,wyt=5,如圖54所示。圖54直線段裁剪

    要求寫出:
    (1) 窗口邊界劃分的9個區間的編碼原則。
    (2) 線段端點的編碼。
    (3) 裁剪的主要步驟。
    (4) 裁剪後窗口內直線段的端點坐標。
    【解】CohenSutherland直線段編碼裁剪算法將窗口及其延長線分成9個區域,每段直線的端點都被賦予一組四位二進制代碼RC=C4C3C2C1。若直線段的兩個端點的區域編碼都為0,即RC1|RC2=0,說明直線段兩端點都在窗口內,應“簡取”之。若直線段的兩個端點的區域編碼都不為0,即RC1&RC2≠0,即直線段位於窗外的同一側,說明直線段的兩個端點都在窗口外,應“簡棄”之。若直線段既不滿足“簡取”也不滿足“簡棄”的條件,直線段必然與窗口相交,需要計算直線段與窗口邊界的交點。交點將直線段分為兩部分,其中一段完全位於窗口外,可“簡棄”之。對另一段直線賦予交點處的區域編碼,再次測試,再次求交,直至求出完全位於窗口內的直線段為止。
    (1) 窗口邊界劃分的9個區間的編碼原則。根據直線段的任一端點相對於窗口的位置,賦予一組4位二進制區域碼RC=C4C3C2C1。
    第1位C1: 若端點位於窗口之左側,即x第2位C2: 若端點位於窗口之右側,即x>wxr,則C2=1,否則C2=0。
    第3位C3: 若端點位於窗口之下側,即y第4位C4: 若端點位於窗口之上側,即y>wyt,則C4=1,否則C4=0。
    (2) 直線段端點的編碼。P1點的編碼為0001,P2點的編碼為0000。
    (3) 裁剪的主要步驟。輸入P1 (0,2),P2 (3,3),wyt=4,wyb=1,wxr=4,wxl=1。
    RC1=0001,RC2=0000。
    因為RC1|RC2≠0,所以不能簡取;因為RC1&RC2=0,所以不能簡棄。直線段與窗口相交,計算直線段與窗口邊界的交點。
    求線段P1(0,2),P2 (3,3)與窗口左界wxl=1的交點,把x=wxl=1 代入直線方程求出y=kx b=2.3,交點坐標P(1,2.3)替換端點坐標P1 (0,2),使P1坐標為(1,2.3),剪掉P1P線段,輸出線段P1P2。
    (4) 裁剪後窗口內直線段的端點坐標。裁剪後窗口內直線段的端點坐標為P1(1,2.3)和P2(3,3)。
    5. 窗視變換公式也可以使用窗口和視區的相似原理進行推導,但要求點P(xw,yw)在窗口中的相對位置等於點P′( xv,yv)在視區中的相對位置,推導以下的窗視變換公式: xv=axw b
    yv=cyw d,變換繫數分別為a=Sx=vxr-vxlwxr-wxl
    b=vxl-wxla
    c=Sy=vyt-vybwyt-wyb
    d=vyb-wybc【解】窗視變換公式也可以使用相似原理推導,隻是要求點窗口中點的相對位置和視區中點的相對保持對應比例關繫。
    設觀察坐標繫下窗口區的左下角坐標為(wxl,wyb),右上角坐標為(wxr,wyt)。設備坐標繫中視區的左下角坐標為(vxl,vyb),右上角坐標為(vxr,vyt)。窗口內的點為(xw,yw),視區內的對應點為(xv,yv)。
    利用相似原理,可以把窗口中的一點P(xw,yw)變換為視區中的一點P′(xv,yv),如圖55和圖56所示。要求點P在窗口中的相對位置和P′在視區中的相對位置保持對應比例關繫。
    圖55窗口中的點
    圖56視區中的點
    則有 xw-wxlwxr-wxl=xv-vxlvxr-vxl
    yw-wybwyt-wyb=yv-vybvyt-vyb
    令 a=vxr-vxlwxr-wxl=Sx
    b=vxl-wxla
    c=vyt-vybwyt-wyb=Sy
    d=vyb-wybc上式簡化為xv=a·xw b
    yv=b·yw d
    6. 按照圖57所示,使用對話框輸入直線段的起點和終點坐標。在屏幕客戶區左側區域繪制輸入直線段和“窗口”,在屏幕客戶區右側區域繪制“視區”並輸出裁剪結果,如圖58所示。這裡需要用到窗視變換公式。使用CohenSutherland算法編程實現。
    圖57輸入對話框
    圖58含窗視變換的直線段裁剪效果圖
    【解】將屏幕垂直分為兩個窗口,左側代表“窗口”,右側代表“視區”。在“窗口”中繪制輸入的直線,在“視區”中繪制輸出結果。
    (1) 編碼宏定義。#define LEFT 1//編碼0001
    #define RIGHT 2//編碼0010
    #define BOTTOM 4//編碼0100
    #define TOP 8//編碼1000(2) 窗口和視區邊界定義。CTestView::CTestView()
    {
    //TODO: add construction code here
    wxl=100;wxr=400;wyb=200;wyt=500;
    vxl=550;vxr=950;vyb=250;vyt=450;
    a=(vxr-vxl)/(wxr-wxl);b=vxl-wxla;
    c=(vyt-vyb)/(wyt-wyb);d=vyb-wybc;
    }(3) OnDraw函數。void CTestView::OnDraw(CDCpDC)
    {
    CTestDocpDoc=GetDocument();
    ASSERT_VALID(pDoc);
    //TODO: add draw code for native data here
    CPen Pen1,Pen2,Pen3,pOldPen;
    Pen1.CreatePen(PS_SOLID,3,RGB(0,0,255));//定義3個像素的畫筆
    pOldPen=pDC->SelectObject(&Pen1);
    //繪制窗口
    pDC->MoveTo(ROUND(wxl),ROUND(wyt));pDC->LineTo(ROUND(wxr),ROUND(wyt));
    pDC->LineTo(ROUND(wxr),ROUND(wyb));pDC->LineTo(ROUND(wxl),ROUND(wyb));
    pDC->LineTo(ROUND(wxl),ROUND(wyt));
    pDC->TextOut((ROUND(wxl) ROUND(wxr))/2,ROUND(wyb)-20,"窗口");
    //窗口標題
    pDC->SelectObject(pOldPen);
    Pen1.DeleteObject();
    Pen2.CreatePen(PS_SOLID,3,RGB(255,0,0));
    pOldPen=pDC->SelectObject(&Pen2);
    //繪制視區
    pDC->MoveTo(ROUND(vxl),ROUND(vyt));pDC->LineTo(ROUND(vxr),ROUND(vyt));
    pDC->LineTo(ROUND(vxr),ROUND(vyb));pDC->LineTo(ROUND(vxl),ROUND(vyb));
    pDC->LineTo(ROUND(vxl),ROUND(vyt));
    pDC->TextOut((ROUND(vxl) ROUND(vxr))/2,ROUND(vyb)-20,"視區");
    //視區標題
    pDC->SelectObject(pOldPen);
    Pen2.DeleteObject();
    //繪制窗口與視區的分割線
    GetClientRect(&Rect);//獲得客戶區的大小
    Pen3.CreatePen(PS_SOLID,3,RGB(128,128,128));
    pOldPen=pDC->SelectObject(&Pen3);
    pDC->MoveTo(Rect.Width()/2,0);
    pDC->LineTo(Rect.Width()/2,Rect.Height());
    pDC->SelectObject(pOldPen);
    Pen3.DeleteObject();
    }(4) 菜單映射函數。void CTestView::OnMENUCohen()//菜單映射函數
    {
    //TODO: Add your command handler code here
    CClientDC dc(this);
    double xw1,yw1,xw2,yw2;
    CInputDlg dlg;
    if(dlg.DoModal()==IDOK)
    {
    xw1=dlg.m_x1;xw2=dlg.m_x2;yw1=dlg.m_y1;yw2=dlg.m_y2;
    }
    RedrawWindow();//刷新屏幕
    //窗口繪制直線
    dc.MoveTo(ROUND(xw1),ROUND(yw1));
    dc.LineTo(ROUND(xw2),ROUND(yw2));
    clip(xw1,yw1,xw2,yw2);
    }(5) 裁剪函數。void CTestView::clip(double xw1,double yw1,double xw2,double yw2)
    //裁剪函數
    {
    double xv1,yv1,xv2,yv2;
    double x,y;
    BOOL Change;
    CClientDC dc(this);
    RC1=EnCode(xw1,yw1);RC2=EnCode(xw2,yw2);
    while(TRUE)
    {
    Change=FALSE;
    if( (RC1|RC2)==0)
    {//取之
    xv1=axw1 b;yv1=cyw1 d;xv2=axw2 b;yv2=cyw2 d;
    //計算視區坐標
    dc.MoveTo(ROUND(xv1),ROUND(yv1));
    dc.LineTo(ROUND(xv2),ROUND(yv2));
    return;
    }
    else if((RC1 & RC2)!=0)
    {//棄之
    return;
    }
    else
    {
    if(RC1==0)//如果P1點在窗口內,交換P1和P2,保證p1點在窗口外
    {
    //交換點的坐標值
    double tx,ty;
    tx=xw1;ty=yw1;
    xw1=xw2;yw1=yw2;
    xw2=tx;yw2=ty;
    //交換點的編碼值
    unsigned int RC;
    RC=RC1;RC1=RC2;RC2=RC;
    }
    if(RC1 & LEFT )//P1點位於窗口的左側

















     
    網友評論  我們期待著您對此商品發表評論
     
    相關商品
    在線留言 商品價格為新臺幣
    關於我們 送貨時間 安全付款 會員登入 加入會員 我的帳戶 網站聯盟
    DVD 連續劇 Copyright © 2024, Digital 了得網 Co., Ltd.
    返回頂部