1. 程式人生 > >計算幾何(多邊形面積的計算,線段規範相交模板)

計算幾何(多邊形面積的計算,線段規範相交模板)

摘自 《計算幾何》    --謝迪

規範相交

---兩條線段恰有唯一一個不是斷點的公共點。

可以用解析幾何解法

1.列直線方程: Ax+By+C=0

  判斷解的情況

  --若無解則平行

  --無窮多解,則說明共線

  --唯一解

    -判斷是否分別在兩條線段的內部

解析結合解法的問題  

1.求解方程需要浮點除法運算

  --浮點誤差

    特別是接近平行時

  --浮點除法運算速度

2.總體效率

  --需要比較定點

  --交點沒有用

計算幾何的演算法

  --僅需要加、減、乘

  --不求交點

如何判斷?

兩條線段相交時,每條線段兩個端點都在另一條線段的異側

兩條線段相交時,每條線段的端點都在另一條線段的異側

--判斷異側

--有向線段

--判斷一個點是在有向線段的左邊還是右邊

判斷一個點實在有向線段的左邊還是在右邊

--新增一條輔助向量

--若要判斷P的相對位置,只要判斷向量P1P在向量P1P2的順時針還是逆時針

向量的叉積

--向量a到向量b成逆時針,上述結果大於0;

--向量a到向量b成順時針,上述結果小於0;

--向量a和向量b共線時(不論同向還是反向),上述結果等於0.

向量的叉積

--本質上是有向面積

有向面積的應用

--求凸多邊形的面積

--將凸多邊形用三角剖分,然後求所有三角形面積之和

有向面積的應用

--求凸多邊形的面積

--任取一點(為計算方便可取原點),將它與所有的多邊形的定點都連上輔助線

--依逆時針方向掃描定點,依次求出當前定點和下一個的頂點以及原點構成的三角形的有向面積,即叉積/2.並將所有的面積相加即可。

 因為向量的叉積有正負之分,所以圖中的藍色區域的面積和紅的區域的面積的正負是相反的(紅色為正,藍色為負)。也就是說,相對於原點,最後藍色區域的面積總會被抵消,相當於求出的就是紅色的區域。

有向面積的應用

--任意多邊形的面積

--與前面一種方法一樣就可以求出來

--可見,有向面積的引入極大方便了計算。

--P和P'在向量P1P2的異側,即

--且P1和P2在向量PP'的異側,即