您的位置:首页 > 其它

51nod 1298 圆与三角形

2016-11-03 21:06 267 查看
#include <bits/stdc++.h>
using namespace std;

struct node
{
long long x,y;
node(){};
node(int a,int b)
{
x=a;y=b;
};
};

long long dotmulti(node n1,node n2)
{
return n1.x*n2.x+n1.y*n2.y;
}

long long disd(node n1,node n2)
{
return (n1.x-n2.x)*(n1.x-n2.x)+(n1.y-n2.y)*(n1.y-n2.y);
}

int main()
{
long long t,cx,cy,cr,x[5],y[5],A,B,C,d1,d2,i,flag;
cin>>t;
while(t--)
{
scanf("%lld%lld%lld",&cx,&cy,&cr);
for(i=0;i<3;i++)
scanf("%lld%lld",&x[i],&y[i]);
flag=0;
for(i=0;i<3;i++)
{
d1=disd(node(x[i],y[i]),node(cx,cy));
d2=disd(node(x[(i+1)%3],y[(i+1)%3]),node(cx,cy));
if(d1<cr*cr&&d2<cr*cr)
continue;
else if(d1>cr*cr&&d2>cr*cr)
{
if(dotmulti(node(x[i]-cx,y[i]-cy),node(x[(i+1)%3]-x[i],y[(i+1)%3]-y[i]))<0
&& dotmulti(node(x[(i+1)%3]-cx,y[(i+1)%3]-cy),node(x[i]-x[(i+1)%3],y[i]-y[(i+1)%3]))<0)
{
A=y[i]-y[(i+1)%3];
B=-(x[i]-x[(i+1)%3]);
C=x[i]*y[(i+1)%3]-x[(i+1)%3]*y[i];
if((A*cx+B*cy+C)*(A*cx+B*cy+C)<=cr*cr*(A*A+B*B))
flag=1;
}
}
else
flag=1;
}
if(flag)
printf("Yes\n");
else
printf("No\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  51nod