Pagini recente » Cod sursa (job #2390579) | Cod sursa (job #2635444) | Cod sursa (job #3171274) | Cod sursa (job #2872669) | Cod sursa (job #37759)
Cod sursa(job #37759)
#include <stdio.h>
#include <math.h>
using namespace std;
int n,x[512][4],st[512],nr=0;
double unghi[10001];
int main()
{
freopen("laser.in","r",stdin);
freopen("laser.out","w",stdout);
scanf("%d\n",&n);
int i,j;
for (i=0;i<n;i++)
scanf("%d %d %d %d\n",&x[i][0],&x[i][1],&x[i][2],&x[i][3]);
for (i=0;i<n;i++)
scanf("%d ",&st[i]);
double mx,my,a1,b1,a2,b2,c2;
for (i=0;i<n;i++)
if (st[i])
{
mx=(double)(x[i][0]+x[i][2])/2;
my=(double)(x[i][1]+x[i][3])/2;
st[i]=0;
a1=-my;
b1=mx;
double vx,vy;
if (mx>0)
vx=mx+10000;
else
vx=mx-10000;
if (my>0)
vy=my+10000;
else
vy=my-10000;
for (j=0;j<n;j++)
if (i!=j)
{
a2=x[j][1]-x[j][3];
b2=x[j][2]-x[j][0];
c2=x[j][0]*x[j][3]-x[j][2]*x[j][1];
if ((a1*x[j][0]+b1*x[j][1])*(a1*x[j][2]+b1*x[j][3])<0&&(c2*(a2*vx+b2*vy+c2))<0)
st[j]=1-st[j];
}
if (mx&&my)
unghi[nr]=atan((double)(my/mx))*180/3.1415926535;
else
if (!mx)
if (my>0)
unghi[nr]=90;
else
unghi[nr]=270;
else
if (mx>0)
unghi[nr]=0;
else
unghi[nr]=180;
nr++;
i=-1;
}
printf("%d\n",nr);
for (i=0;i<nr;i++)
printf("%.6f\n",unghi[i]);
return 0;
}