初識計算幾何

2021-09-05 11:15:24 字數 3873 閱讀 7910

一、定義

計算幾何

問題的輸入一般是關於一組幾何物體(如點、線)的描述;輸出常常是有關這些物體的問題的回答,如直線是否相交,點圍成的面積等問題。

二、基本元素

1)二維情形:1、點;2、線段(向量);3、直線;4、多邊形;5、圓

2)三維情形:1、多面體;2、平面;3、球

//舉例:乙個二維向量的定義

struct point_p

point_p (double a,double b): x(a),y(b) {} //operator

};//舉例:乙個直線的定義

struct line_p

line_p (point_p m,point_p n)

};

三、基本運算1)點積(以三維為例)

定義: a·b=|a||b|cos,a·b=axbx+ayby+azbz,結果為標量

應用:夾角計算、前後判定等

2)叉積

定義:(二維與三維不同)結果為向量

應用:方向判斷、面積計算等

//舉例:乙個二維向量的基本運算

friend point_p operator + (point_p a, point_p b)

friend point_p operator - (point_p a, point_p b)

friend double operator ^ (point_p a, point_p b) //叉積

friend double operator * (point_p a, point_p b) //點積

//舉例:乙個三維向量的基本運算

friend point_t operator +(point_t a, point_t b)

friend point_t operator -(point_t a, point_t b)

friend point_t operator ^(point_t a, point_t b) //叉乘

friend double operator *(point_t a, point_t b) //點積

旋轉

等等);線性代數相關(求交點)

【小結】一切計算幾何問題的求解都是建立在點,線,面,

形的基本關係的計算之上。而基本上所有計算幾何問題都離不開向量計算,所以點積和叉積的運用十分關鍵。

注意精度控制,能用整數的地方盡量用整數,要想到擴大資料的方法(擴大一倍,或擴大sqrt2)。因為整數不用考慮浮點誤差,而且運算比浮點快。考慮全面,不要遺漏特殊情況。特殊情況還需要特殊處理。

四、跨立實驗:規範相交;不規範相交

第一步:快速排斥實驗 - 如果分別以p1p2 ,p3p4為對角線做矩形,而這兩個矩形不相交,則這兩條線段肯定不相交

第二部:進一步判斷 - x、y方向上都有交,(max(x1,x2)≥min(x3,x4))∧ (max(x3,x4)≥min(x1,x2)) ∧(max(y1,y2)≥min(y3,y4))∧ (max(y3,y4)≥min(y1,y2))

問題描述:已知點p的

x、y座標和乙個n邊形

a1a2…an

。判斷點p在n

邊形的內部

,外部或邊上。

演算法思想:首先過點

p做一條足夠長的射線,如果這條射線與多邊形的交點個數為奇數,那麼點

p在多邊形的內部,如果交點為偶數(包括

0個),那麼點

p在多邊形的外部。

-d樹;2)多維二叉樹也稱為k-d

樹(k-d tree)

,它是二分思想在範圍查詢問題

中的直接應用。它交替使用橫線和豎線將平面分成兩個矩形。這些直線過

s中的點,

並且使得

直線兩側內近似

相等。注意這裡不是按面積平分,而是按點數平分,因為

規定直線必須經過

s內的點。

​​​​​​​1)二維

凸包捲包裹

2)三維凸包隨機增量

//二維凸包

void graham (point_p *p,point_p *ans,int &n,int &l)

for (i=n-2;i>=0;i--)

l--;

}

五、基本問題1、計算求解題:諸如求某乙個具體值(如)的問題。解這一類題除了需要有紮實的解析幾何基礎,還要注意全面地看問題,仔細分析題目中的特殊情況。當然,用線代的方法去計算也是不錯選擇。

2、存在性問題

3、最佳值問題:這類問題是計算幾何題中比較難的問題,一般沒有什麼非常有效的演算法能夠求得最佳解,最常用的是用近似演算法去逼近最佳解,近似演算法的優劣也完全取決於得出的解與最優解的近似程度。

六、一些基礎

點點距離:

點到直線距離:

旋**向量(

a,b)逆時針旋轉角度

a,得到

向量(x·cosa-y·cosa,x·sina+y·cosa)

三角形面積:|叉積

|/2

四面體體積:

|混合積|

幾何重心:見後

//舉例

double area () 。故,在做任何計算幾何題之前,我們都要考慮如何儘量減少誤差(尤其是三角函式反函式),甚至中間過程計算途徑的選擇也是有講究的。能夠做到「0」誤差是終極目標。

例題:poj 2187 beauty contest

【問題描述】

貝茜,農夫約翰的牛,剛剛在牛選美大賽榮獲第一名,贏得頭銜『世界最美牛小姐 「。因此,貝茜要瀏覽n(2<= n <= 50,000)世界各地的農場,以傳播農民和他們的奶牛之間的善意。為簡單起見,將被表示為乙個二維的平面,其中每個農場位於上面的一對整數座標(x,y),取值範圍為-10,000... 10,000。沒有兩個農場共享相同的座標。

雖然貝西前往一些農場之間的距離,可以直接對農場之間在一條直線上,是相當大的,所以她要帶著滿滿一箱子的乾草與她,讓她旅程中有足夠的食物吃,。由於貝西可以在每乙個農場給她的行李箱裝食物,她想確定的單次旅行最大可能距離。所以她想計算對各養殖場的最大距離的大小以決定攜帶行李箱大小,你必須幫助她。

【輸入】

第1行:乙個整數,n

第2.. n +1:兩個空格分隔的整數x和y指定的座標每個農場

【輸出】第1

行:乙個整數的一對,彼此相距最遠的農場之間距離的平方。

計算幾何與計算幾何與

博主這裡曾經學過計算幾何 下文簡稱jj 所以沒有證明或者說明某些演算法,不適合初學者食用 用一道例題及黃學長的 來理解 黃學長 include include include include include include include include include include define...

計算幾何 幾何基礎

這章早在2017年寒假就在培訓的時候由來自清華的hta老師上過了 但是本蒟蒻那時候並不是懂的太多 所以這週ww老師又上了一遍 大概記錄一下 大概就跟高中必修4的平面向量差不多 有上過的應該都會 a x1,y1 b x2,y2 a b x1x2 y1y2 a b a b cos a,b 運用 若a與b...

caioj 計算幾何 面積 計算幾何 叉積

題意 在乙個平面座標系上隨意畫一條有n個點的封閉折線 按畫線的順序給出點的座標 保證封閉折線的任意兩條邊都不相交。最後要計算這條路線包圍的面積。用叉積有關知識解決。重要結論 abs 三點的叉積 2為這三點圍成的三角形的面積。簡要證明 上圖中,黑色的三角形面積為矩形 三個三角形,設數,計算,合併同類項...