若
定義叉積 : x1y2 - x2y1
如圖是一種簡單情況,叉積表示的面積即最大的矩形面積減去 p1p2t3所構成的矩形面積。又t4=s4,即要證2(t1+t2+t3)=s1+t1+s2+t2,又已知s1+p1=t1+t3+p2,and s2+p2=t2+t3+p1兩式左右相加即證。
另外的情況也可利用面積的加減證明。
已知直線上的兩點s、e,可以求出ax+by+c=0的引數
a = s.y-e.y;
b = e.x-s.x;
c = s×e;
在直線上取兩點p,q,構成直線的方向向量
poj 2318
2398
在直線外的兩個點分別作應用1中的叉積操作,若得到的結果同號則在同側,異號則在異側。
poj 3304:原題等價為是否存在一條直線(投影路徑)與所有的線段相交
poj 1039:求從管子的一端到最遠到達**。暴力列舉所有可能的光線方向,與管子端點相交、與管重合均可穿過。需注意光線雖與管子不相交但超出管子的情況。
有以下兩種方法。
1、容易理解的是利用性質2,得到直線方程a1x+b1y+c1=0與a2x+b2y+c2=0。當a1b2=a2b1時,直線平行(特判重合的情況);否則兩直線相交,直接解得x=
2、分別在直線上取兩點,類似於應用2,將其中一條作為基準直線,得到兩個叉積結果。若都為0,則兩直線重合。若兩者不為0且值相等,則兩直線平行。否則相交。
用叉積,而不是求出斜率,這樣能避免斜率不存在的情況。
poj 1269:過濾掉前兩種情況後,求直線的交點座標時再列出直線方程(ax+by+c=0)求解。
4. 判斷線段與線段的位置關係
poj 1556:列舉任意兩個端點是否存在直線通道時,需判斷該線段與其餘的豎直線段是否相交。
poj 2653:該break時就break,否則t無休……
poj 3449:差不多可以當作模擬題來做。
cf 589d:可以抽象成線段來做。
5.判斷多邊形是否是凸包
順次給出多邊形的點判斷其是否構成凸包。由於不知道是順時針還是逆時針給出的,所以先記錄一組(p1−p0)×(p2−p1)的符號作為基準。之後每組(pi+1−pi)×(pn+2−pn+1)的符號都與之比對,若異號,則不為凸包。
注意:若題意允許三點共線,則先找到第乙個非0的符號,再進行判斷。並且允許有0存在。
先特判點o是否在邊上(可利用叉積為零)。
將點o作為頂點,順次連線多邊形的端點,得到n個角度。用叉積順次得到各個角度的符號,若全部同號則點在凸多邊形內。否則不在凸多邊形內。
poj 1584:先判斷給出的點是否構成凸包,再判斷圓心是否在凸包內,再看是否能容納下這個圓。
叉積在ACM中的應用
若o a x1,y 1 ob x2 y 2 oa x1,y1 ob x2,y2 定義叉積 oa 如圖是一種簡單情況,叉積表示的面積即最大的矩形面積減去p 1p 2 t 3 p1p2t3 所構成的矩形面積。又t 4 s 4 t4 s4 即要證 2 t1 t 2 t3 s 1 t 1 s 2 t 2 2...
向量外積和內積在程式設計中的應用
先介紹向量外積 向量ab 向量ac ab ac sin 顯然結果的絕對值為 abc面積的2倍,因此利用向量外積可以求任意多邊形的面積 向量的外積 double det int a,int b,int c 1 結果 0,說明三點共線 2 結果 0,說明向量ac在向量ab的逆時針方向 3 結果 0,說明...
ACM計算幾何 叉積應用
目錄 定義性質 應用判斷點與直線的相對位置 判斷線段與直線的位置關係 判斷直線與直線的位置關係 判斷線段與線段的位置關係 判斷多邊形是否是凸包 判斷點是否在凸多邊形內 若 oa x1,y1 o b x2,y 2 定義叉積 oa 如圖是一種簡單情況,叉積表示的面積即最大的矩形面積減去p1 p2t3 所...