hihoCoder1040 矩形判斷

2021-07-31 18:21:36 字數 1206 閱讀 4934

大體思路是可以出來的,就是先判斷能否組成四邊形,然後再判斷能否組成矩形。

四邊形這部分比較難搞,但是我們有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

題意 給四個線段,判斷是否圍成了乙個矩形。思路 先判定是不是平行四邊形,再判斷是否有乙個角是直角。判定是否是平行四邊形可以通過統計頂點數和邊長的個數來進行。判斷是否有乙個角是直角可以通過邊向量來判斷。起初我判斷是否有乙個角是直角通過任取三個頂點,然後通過勾股定理判斷是否存在乙個直角,想了很久才想到反...