- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五次培训-演算法-建中首页
95建中資訊科校內培訓 CK5925 黃上恩
Algorithm – Computational Geometry PAGE 6/ NUMPAGES 6
演算法:Math, Computational Geometry
95/11/30
工具:座標系 必備武器:向量
點Points
兩個點的距離
兩個點的向量
向量內積Dot Products
兩個向量和的內積值為
用途:判別角的大小、線段是否垂直
【例 SEQ pbn \* MERGEFORMAT 1】給定三角形頂點A,B,C的座標,請你判斷ABC是否為直角三角形。
向量外積Cross Products
平面上的向量和外積之值為 =
外積值為0表示兩向量平行(collinear),值為正代表向量在的順時針方向。
【例 SEQ pbn \* MERGEFORMAT 2】設O為座標原點,平面上有兩個點P,Q。有一個機器人站在原點,面對P,現在他要旋轉至面對Q,請問他應該向左轉或是向右轉?
【例 SEQ pbn \* MERGEFORMAT 3】給定一條直線的線上兩點P,Q,以及另外兩個點A,B,請你判斷A,B是否在直線的同一側?
【例 SEQ pbn \* MERGEFORMAT 4】某個人從點出發,依序沿著線段走,試問走到時,他左轉了多少次?右轉了多少次?
【例 SEQ pbn \* MERGEFORMAT 5】給你一個線段以及一個點,試判斷此點是否在線段上。
【例 SEQ pbn \* MERGEFORMAT 6】給你兩條線段以及,請你判斷這兩條線段是否相交。 [ACM 378,191]
方法一:外積方法
Case 1: 若 在線段異側 且 在線段異側 ,那麼線段相交。
Case 2
P1
P2
P3
P4
Case 1
P1
P3
P4
P2
Case 2: 若 某個點在相對的另一條線段上,那麼線段相交。
方法二:純解析法(解方程)
算出兩直線交點位置,判斷這個交點是否在兩條線段上。
【例 SEQ pbn \* MERGEFORMAT 7】平面上給定n個點,請找出所有的三點共線。 [I2A 33.1-1,ACM 270]
多邊形Polygons
多邊形是由一些線段所組成的封閉折線。如果多邊形上的任兩條邊皆不相交,那麼此多邊形稱為單純多邊形(simple polygon)。一個單純多邊形當中任意兩頂點之連線線段若全部落在多邊形內,那麼我們稱這樣的多邊形為凸多邊形(convex polygon)。
在座標平面上計算多邊形的面積有簡單的公式可算。若一個多邊形的點依序為,其中。那麼此多邊形的面積為:
【例 SEQ pbn \* MERGEFORMAT 8】依序給出一個n多邊形的n個頂點,請你判斷此多邊形是否為凸多邊形。
[ACM 10078]
【例 SEQ pbn \* MERGEFORMAT 9】給定一個多邊形以及一個點P,請你判斷此點是否在多邊形內部。 [ACM 634]
基本想法:過P作一條射線L,若L與多邊形交於奇數個點,那麼P在內部;若為偶數個點則在外部。但是計算交點時要注意幾種情形:
這這…到底交幾個點啊
。
Q
偶數個交點,但是在內部。
P
掃描法 Line Sweeping
掃描法也是計算幾何上常見的解題方法之一。通常是把所有的點先行依照某個特定的順序排列(例如按照x座標排序),再由左至右或由右至左處理。
【例 SEQ pbn \* MERGEFORMAT 10】平面上兩個點以及,我們說支配(Dominate)了若且唯若且。給定平面上的個點,請你找出所有的點,都不被其他個點支配。
[C名題百則5-16]
【例 SEQ pbn \* MERGEFORMAT 11】給定一些只垂直或平行於座標平面的線段,請你判斷是否存在兩線段相交。
顯然我們可以用O(n2)的時間求出答案,但是利用掃描法以及二分搜尋法可以加快速度。
【例 SEQ pbn \* MERGEFORMAT 12】給定一些線段,請你判斷這些線段之中是否有交點存在。
矩形覆蓋問題不只可以用Divide and Conquer做,還可以用掃描的。
【例 SEQ pbn \* MERGEFORMAT 13】座標平面上給定一些矩形,求總覆蓋面積。 [USACO 3.1 Shaping Regions, ACM 688]
不只是橫向掃描,有時候讓直線轉一圈也是不錯的辦法。
【例 SEQ pbn \* MERGEFORMAT 14】蛋糕上有一些草莓,其座標皆為整數。設蛋糕的中心是(0,0),請你切一刀過中心,並且讓兩邊蛋糕上的草莓數量相同。 [ACM 10167]
【例 SEQ pbn \* MERGEFORMAT 1
文档评论(0)