挑戰程式設計 CGL 2 D Distance

2021-09-24 00:23:26 字數 1245 閱讀 4589

#include#define eps (1e-10)

using namespace std;

class point

point operator + (point p)

point operator - (point p)

point operator * (double a)

point operator / (double a)

double norm()

double abs() //倆點間的距離

};struct segment

segment(point _p1,point _p2):p1(_p1),p2(_p2){}

};double dot(point a,point b)//求內積 就是向量a*b

//外積的值為a與b向量構成的平行四邊形面積的值

double cross(point a,point b)//求外積

//判斷是否正交 向量內積:a*b=|a||b|*cos(y) 當cos為0時正交(90,-90垂直)

//a*b=a.x*b.x+a.y*b.y;

bool solve1(point a,point b)//是否正交

bool intersect(point p1,point p2,point p3,point p4)//判斷是否相交 通過ccw來判斷

/*點a與點b之間的距離等於向量a-b或b-a的絕對值。

*/ double getdis(point a,point b)//求倆點間的距離 /*

設直線p1 p2上的向量為a=p2-p1,p與p1構成的向量b=p-p1

則點p與直線p1p2的距離d就等於a,b構成的平行四邊形的高

用a與b外積的大小(平行四邊形的面積)除以a的大小|a|即可求出高d

d=|a*b|/|a|=|(p2-p1)*(p-p1)|/|p2-p1|;

*///注意:這裡segmet s是不規範的應該是 line s 才對

double getdis_li(segment s,point p)//點與直線的距離

double getdis_sp(segment s,point p)//點與線段的距離

double getdis_ss(segment s1,segment s2)//線段與線段之間的距離

int main()

return 0;

}

挑戰程式設計 CGL 2 A

aoj cgl 2 a 題意 t組資料 每次給出4個點 p1,p2,p3,p4 p1與p2的向量是p 1 p3與p4的向量是p 2 當p 1與p 2平行時輸出2,正交輸出1,其他輸出0 可以用向量的內積和外積做這題 include define eps 1e 10 using namespace s...

挑戰程式設計 CGL 1 A Projection

include define eps 1e 10 using namespace std class point point operator point p point operator point p point operator double a point operator double a...

挑戰程式設計競賽學習筆記2

書中只給出演算法函式,程式所用資料預設已讀入程式並儲存在全域性變數中。以高效演算法為目標,需要正確估算各種演算法的複雜度。縮短執行時間,主要應該從複雜度入手。程式都從標準輸入按指定格式讀入資料 輸入資料已經由main函式讀入並儲存在全域性變數中 通過呼叫solve函式來求解 在設計滿足問題要求的演算...