一、定義
計算幾何
問題的輸入一般是關於一組幾何物體(如點、線)的描述;輸出常常是有關這些物體的問題的回答,如直線是否相交,點圍成的面積等問題。
二、基本元素
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為這三點圍成的三角形的面積。簡要證明 上圖中,黑色的三角形面積為矩形 三個三角形,設數,計算,合併同類項...