1298 圓與三角形(計算幾何)

2021-07-28 15:10:57 字數 1409 閱讀 4400

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-4:2個數,三角形第3個點的座標。(-3000 <= xi, yi <= 3000)

output

共t行,對於每組輸入資料,相交輸出」yes」,否則輸出」no」。

input示例

2 0 0 10

10 0

15 0

15 5

0 0 10

0 0

5 0

5 5

output示例

yes

no題解:這道題先去討論三角形的三個頂點是否在圓外面,如果都在圓外面,則變成了判斷的線段是否與圓相交的問題

#include 

#include

#include

#include

#include

using namespace std;

#define m 1010

#define ll long long

struct node

;node no[3];

node c;

ll rl[3], r;

bool judge(node *a, node *b)//判斷線段是否與圓相交

else

if(a->y == b->y)

else

num1 = al*c.x + bl*c.y + cl;

num1 *= num1;

num2 = r*r

*(al*al+bl*bl);

if(num2 < num1)//判斷直線是否可以與圓相交

ll angle1 = (c.x-a->x)*(b->x-a->x) + (c.y-a->y)*(b->y-a->y);//線段與圓是否相交的條件

ll angle2 = (c.x-b->x)*(a->x-b->x) + (c.y-b->y)*(a->y-b->y);

if(angle1>0 && angle2>0)

return0;}

int main()

if(!rl[0] || !rl[1] || !rl[2])

if(rl[0]<0&&rl[1]<0&&rl[2]<0)

if(rl[0]>0&&rl[1]>0&&rl[2]>0)

else

}else

}return

0;}

1298 圓與三角形

1298 圓與三角形 hackerrank 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出圓的圓心和半徑,以及三角形的三個頂點,問圓同三角形是否相交。相交輸出 yes 否則輸出 no 三角形的面積大於0 第1行 乙個數t,表示輸入的測試數量 1 t 10000 之後...

1298 圓與三角形

給出圓的圓心和半徑,以及三角形的三個頂點,問圓同三角形是否相交。相交輸出 yes 否則輸出 no 三角形的面積大於0 第1行 乙個數t,表示輸入的測試數量 1 t 10000 之後每4行用來描述一組測試資料。4 1 三個數,前兩個數為圓心的座標xc,yc,第3個數為圓的半徑r。3000 xc,yc ...

1298 圓與三角形

給出圓的圓心和半徑,以及三角形的三個頂點,問圓同三角形是否相交。相交輸出 yes 否則輸出 no 三角形的面積大於0 第1行 乙個數t,表示輸入的測試數量 1 t 10000 之後每4行用來描述一組測試資料。4 1 三個數,前兩個數為圓心的座標xc,yc,第3個數為圓的半徑r。3000 xc,yc ...