把三角形的每條邊單獨判斷,先判斷兩個點是否都在裡面,是否乙個點在裡面乙個點在外面,直接return。
然後判斷點到直線的距離是否小於等於r,是的話用餘弦定理判斷和圓是否有交點,原理畫圖就能明白,如果沒有交點的話在圓外的兩個角必定有乙個是鈍角,用餘弦定理判斷是否小於0即可。
順便一提,如果不需要用到double型別就都用long long型別,提高精度,點積叉積兩點間距離的平方都是整數。
#include
using
namespace std;
typedef
long
long ll;
struct vecc;
ll r;
ll dot
(const vec &a,
const vec &b)
ll cross
(const vec &a,
const vec &b)
vec sub
(const vec &a,
const vec &b);}
ll dist2
(const vec &a,
const vec &b)
bool
judge
(const vec &a,
const vec &b)
inline ll in()
while
(c>=
'0'&&c<=
'9') res=res*
10+c-
48,c=
getchar()
;return p*res;
}int
main()
return0;
}
圓與三角形(圓與三角形是否相交)
給出圓的圓心和半徑,以及三角形的三個頂點,問圓同三角形是否相交。相交輸出 yes 否則輸出 no 三角形的面積大於0 第1行 乙個數t,表示輸入的測試數量 1 t 10000 之後每4行用來描述一組測試資料。4 1 三個數,前兩個數為圓心的座標xc,yc,第3個數為圓的半徑r。3000 xc,yc ...
判斷三角形與圓是否相交
include include includeusing namespace std struct p struct circle int cmp double x 誤差處理 bool judge double a,double b,double c,double x1,double x2 一元二次...
1298 圓與三角形(計算幾何)
input 第1行 乙個數t,表示輸入的測試數量 1 t 10000 之後每4行用來描述一組測試資料。4 1 三個數,前兩個數為圓心的座標xc,yc,第3個數為圓的半徑r。3000 xc,yc 3000,1 r 3000 4 2 2個數,三角形第1個點的座標。4 3 2個數,三角形第2個點的座標。4...