1. 程式人生 > >專題學習——計算幾何

專題學習——計算幾何

基本的叉積、點積和凸包等東西就不多說什麼了,網上一搜一大堆,切一些題目基本熟悉了就差不多了。

  接下來,研究了半平面交,思想方法看07年朱澤園的國家隊論文,模板程式碼參考自我校大牛韜哥:

  一些半平面交的題目:

  POJ 3525 Most Distant Point from the Sea (推薦)
  http://acm.pku.edu.cn/JudgeOnline/problem?id=3525
  給出一個多邊形,求裡面的一個點,其距離離多邊形的邊界最遠,也就是多邊形中最大半徑圓。
  解法:可以使用半平面交+二分法解。二分這個距離,邊向內逼近,直到達到精度。

  POJ 3384 Feng Shui (推薦)
  http://acm.pku.edu.cn/JudgeOnline/problem?id=3384
  半平面交實際應用,用兩個圓覆蓋一個多邊形,問最多能覆蓋多邊形的面積。
  解法:用半平面交將多邊形的每條邊一起向“內”推進R,得到新的多邊形,然後求多邊形的最遠兩點。

  (以上題目來自別人的blog,後面還有幾題是我自己找到的)

  座標旋轉題目切得不多

  一些旋轉卡殼的題目

  POJ 2079 Triangle
  http://poj.org/problem?id=2079


  這題以為O(N^2)的複雜度會超時,結果就是O(N^2)複雜度

  然後看了一些掃描線之類的東西。

  推薦幾道比不錯的題目:

  下面看了一些隨機演算法:(08年顧研論文-《淺談隨機化思想在幾何問題中的應用》)

    (1)隨機增量法:這個演算法很犀利啊,把一些計算幾何的問題降了一個n複雜度。(典型的有最小圓覆蓋)

        網上找了最小圓覆蓋的隨機增量演算法,裡面程式碼倒是不錯,就是解釋的不是很清楚,推薦看《計算幾何演算法與應用(第3版)》(鄧俊輝譯,清華大學出版社出版)中第91頁“4.7最小包圍圓”這個章節中的內容,比較詳細也很清楚,程式碼我參考了這個blog的

http://blog.csdn.net/pvpishard/archive/2011/01/27/6167262.aspx

    (2)模擬退火:參考顧研論文

      模擬退火的題目:

      POJ 3285 Point of view in Flatland
      http://poj.org/problem?id=3285
      這題的難點在於找到合適的評估函式,當然這題也可以通過解方程組來做

      POJ 2600 Geometrical dreams
      http://poj.org/problem?id=2600
      這題不是模擬退火的題,但是可以用模擬退火過。非模擬退火的方法也不難

  解析幾何,平面最近點對,。。。這些搞得也不是很深入。

  兩道題目

  圓的面積並和交,詳細可以看AekdyCoin大牛的blog

  題目:

  凸多邊形的面積並

  先看了AC大牛的blog學會了O(N^3)的方法,後來在做Codeforces的時候發現有O(N^2*logN)的方法,而且也不繁瑣

  Codeforces Round #83 DIV1 的 E題用O(N^3)的方法過不掉第49組資料,然後研究了其他大牛的凸多邊形交的程式碼

  先是看了dagon的程式碼發現其實他的程式碼有問題,Codeforces的資料居然沒有查出來。然後看了syntax_error的程式碼,

  發現他是用類似梯形剖分的方法做的,複雜度O(N^2*logN),果斷就學習了

  有一類題目是給出一些點,並告訴你哪些點之間有連線,並且這些連線段之間除端點之外沒有其他交點(有時候這些線段是要自己處理出來的)。

  然後題目要你求

    1 每小塊多邊形的面積

    2 有多少個K多邊形內部不含點和線段

    3 這些線段圍成的圖形的輪廓線

  這類題目的方法都差不多,在很多大牛的blog裡都可以找到類似的方法。

  題目:

  三維幾何

  網上有關三維幾何的內容很少阿,程式碼和題目基本都不怎麼能搜到,我也就切了不多的幾題

  前面座標旋轉裡的兩到題:

  其他一些題目:

  HDU 3644 A Chocolate Manufacturer’s Problem (2010杭州網路賽)
  http://acm.hdu.edu.cn/showproblem.php?pid=3644
  本來想用模擬退火水一下的,結果徘徊於WA和TLE之間無法AC