大體思路是可以出來的,就是先判斷能否組成四邊形,然後再判斷能否組成矩形。
四邊形這部分比較難搞,但是我們有st
l 啊, 直接自定義乙個小於號,然後把所有的點扔進se
t ,最後看下si
ze是不是等於
4 就好了。
好,我們已經知道了這是乙個四邊形,再怎麼判斷它是否是矩形?
思來想去啊,似乎計算幾何中沒有簡潔的方法,於是思路回到初中數學。你已經知道了這玩意是四邊形,那麼首先想到的定理就是「三個角是直角的四邊形是矩形」。這個就需要把四條線段首尾相連,然後兩兩判斷是否垂直…好像還是有難度。我們從線段的位置關係來入手,如果對於一條線段,其它三條中有一條是平行於它的,另外兩條是垂直於它的,這樣是不是矩形?
考慮證明,首先垂直於它的那兩條是平行的,然後它又和另外一條平行,那麼就是「兩組對邊分別平行」。初中數學中有結論,這樣就是平行四邊形。
//計算幾何
#include
#include
#include
#include
#define eps 1e-8
using
namespace
std;
struct pointpt[10];
struct vecv[5];
set s;
vec operator-(point p1, point p2);}
vec operator-(vec v1, vec v2),v1.x-v2.x,v1.y-v2.y};}
vec operator+(vec v1, vec v2),v2.x+v1.x,v2.y+v1.y};}
double
operator*(vec v1, vec v2)
bool
operator
<(point p1, point p2)
int main()
for(i=2;i<=8;i+=2)v[i>>1]=pt[i]-pt[i-1];
c1=c2=0;
for(i=2;i<=4;i++)
if(fabs(dc(v[1],v[i]))else
if(fabs(v[1]*v[i])if(c1==2 and c2==1)printf("yes\n");
else
printf("no\n");
}return
0;}
hihoCoder 1040 矩形判斷
描述 給出平面上4條線段,判斷這4條線段是否恰好圍成乙個面積大於0的矩形。輸入 輸入第一行是乙個整數t 1 t 100 代表測試資料的數量。每組資料報含4行,每行包含4個整數x1,y1,x2,y2 0 x1,y1,x2,y2 100000 其中 x1,y1 x2,y2 代表一條線段的兩個端點。輸出 ...
hihoCoder1040 矩形判斷
時間限制 1000ms 單點時限 1000ms 記憶體限制 256mb 描述給出平面上4條線段,判斷這4條線段是否恰好圍成乙個面積大於0的矩形。輸入輸入第一行是乙個整數t 1 t 100 代表測試資料的數量。每組資料報含4行,每行包含4個整數x1,y1,x2,y2 0 x1,y1,x2,y2 100...
矩形判斷 hihoCoder1040
題意 給四個線段,判斷是否圍成了乙個矩形。思路 先判定是不是平行四邊形,再判斷是否有乙個角是直角。判定是否是平行四邊形可以通過統計頂點數和邊長的個數來進行。判斷是否有乙個角是直角可以通過邊向量來判斷。起初我判斷是否有乙個角是直角通過任取三個頂點,然後通過勾股定理判斷是否存在乙個直角,想了很久才想到反...