ACM 幾何基礎(6)

2021-07-22 11:43:48 字數 1718 閱讀 3259

幾何基礎(6)

求多邊形面積:

要想計算多邊形的面積我們可以轉化為求多個三角形的面積之和得到:

在解析幾何裡, △abc的面積可以通過如下方法求得: 點座標

=>

邊長=>

海**式

=>

面積但是問題就出現在這裡了,用這種方法做的話,計算量大,精度損失。

這裡就利用到叉積了:

叉積的幾何意義

叉積的長度 |a × b| 可以解釋成以a和

b為邊的平行四邊形的面積。進一步就是說,三重積可以得到以a,

b,c為邊的平行六面體的體積。

所以得到

多邊形面積公式:a=sigma(ai) (i=1…n-2)(凹多邊形也適用,如凹四邊形,相當於乙個大三角形減去乙個小三角形,減去的小三角形其實就是加上負的有向面積)

**如下:

double mianji(int n)

double ans=0.0;

point pt=edge[0];

for(int i=1;ians+=((edge[i]-pt)^(edge[i+1]-pt))/2;

return fabs(ans);

若r==0說明在

l的線上或延長線上,情況如下:

分別用兩端點指向p點的向量點積,

t=(p-l.s)*(p-l.e)

>=0;

<0

**如下:

return ((l.s-p)^(l.e-p)==0)&&((p-l.s)(p-l.e)<=0);

判斷點是否在凸包或在凸變形內(邊上也行)

首先凸邊形的點按逆時針已經排序好的情況下才可執行

若點是在凸邊形內則按逆時針順序每次指向兩個點,那麼它的叉積一定要麼都是大於0或都是小於

0,至於等於

0就直接說明的邊上的情況。

下面舉例說明:

也可以舉例p在凸邊形外的情況,畫圖驗證,肯定存在不同符號的情況

**如下:

//判斷點是否在凸包內或說的凸邊形內

//點已經按逆時針排序

bool inconvexpoly(point p,point pt,int n)

for(int i=0;iif(((p[(i+1)%n]-pt)^(p[i]-pt))>0)//在凸變形外

return false;

if(((p[(i+1)%n]-pt)^(p[i]-pt))==0)//在邊上

return true;

return true;//在凸邊形內

繼續更新中……

ACM幾何問題

今天覆習了一下幾何的基礎內容,順便整理了一下。其實幾何也挺簡單的,只要熟練掌握點積和叉積,這些都是易學易懂的。1.點 直線 線段 圓 三角形 多邊形 矩形 判相交,判位置,求交點,求最近點,求特殊點 三角形六心等 2.凸包 水平序,極角序 規範,非規範 3.半平面交 求核 4.旋轉卡殼 多邊形直徑 ...

ACM 計算幾何

1.找凸包的最小寬度 include using namespace std double eps 1e 10 考慮誤差的加法運算 double add double a,double b struct p p double x,double y x x y y p operator p p p o...

ACM計算幾何 三維幾何模板

三維幾何函式庫 include define eps 1e 8 define zero x x 0?x x eps vlen xmult subt p,s.b subt p,s.c eps vlen xmult subt p,s.c subt p,s.a eps int dot inplane ex...