| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
why WA?!精度问题吗#include<iostream>
#include<cmath>
#include<iomanip>
#include<string>
#include<vector>
#include<stdlib.h>
#include<fstream>
#include<stdio.h>
#include<map>
using namespace std;
const double pi=3.14159253;
double dis(double x1,double y1,double x2,double y2)
{
return sqrt(double((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
}
int main()
{
int i,n,k,nan,an[4];
double a,b,c,A,B,C,afa;
double x1,y1,x2,y2,x3,y3,d;
double p1[3][3],p2[3],ans[4][3],dt;
cin>>n;
for(k=0;k<n;k++)
{
cin>>x1>>y1>>x2>>y2>>x3>>y3>>d;
afa=d/180*pi;
a=dis(x2,y2,x3,y3);
b=dis(x3,y3,x1,y1);
c=dis(x1,y1,x2,y2);
A=acos((b*b+c*c-a*a)/(2*b*c));
B=acos((a*a+c*c-b*b)/(2*a*c));
C=acos((a*a+b*b-c*c)/(2*a*b));
nan=0;
memset(an,0,sizeof(an));
//0
{
p1[0][0]=sin(afa+C)*sin(afa+A);
p1[0][1]=sin(afa)*sin(afa);
p1[0][2]=-sin(afa)*sin(afa+C);
p1[1][0]=-sin(afa)*sin(afa+A);
p1[1][1]=sin(afa+A)*sin(afa+B);
p1[1][2]=sin(afa)*sin(afa);
p1[2][0]=sin(afa)*sin(afa);
p1[2][1]=-sin(afa)*sin(afa+B);
p1[2][2]=sin(afa+B)*sin(afa+C);
p2[0]=c;
p2[1]=a;
p2[2]=b;
dt=sin(afa)/(sin(afa+A)*sin(afa+B)*sin(afa+C)+sin(afa)*sin(afa)*sin(afa));
for(i=0;i<3;i++)
{
ans[0][i]=p1[i][0]*p2[0]+p1[i][1]*p2[1]+p1[i][2]*p2[2];
ans[0][i]*=dt;
}
//cout<<ans[0]<<' '<<a<<endl;
//cout<<ans[1]<<' '<<b<<endl;
//cout<<ans[2]<<' '<<c<<endl;
if(ans[0][0]<a && ans[0][1]<b && ans[0][2]<c)
{
nan++;
an[0]=1;
}
}
//1
{
p1[0][0]=sin(afa+B)*sin(afa+B+C-A);
p1[0][1]=sin(afa)*sin(afa+B-A);
p1[0][2]=-sin(afa)*sin(afa+B+C-A);
p1[1][0]=-sin(afa+B)*sin(afa+B-A);
p1[1][1]=sin(afa+B)*sin(afa+B);
p1[1][2]=sin(afa)*sin(afa+B-A);
p1[2][0]=sin(afa+B-A)*sin(afa+B-A);
p1[2][1]=-sin(afa+B)*sin(afa+B-A);
p1[2][2]=sin(afa+B)*sin(afa+B+C-A);
p2[0]=c*sin(afa);
p2[1]=a*sin(afa+B-A);
p2[2]=b*sin(afa+B-A);
dt=1.0/(sin(afa+B)*sin(afa+B)*sin(afa+B+C-A)+sin(afa)*sin(afa+B-A)*sin(afa+B-A));
for(i=0;i<3;i++)
{
ans[1][i]=p1[i][0]*p2[0]+p1[i][1]*p2[1]+p1[i][2]*p2[2];
ans[1][i]*=dt;
}
//cout<<ans[0]<<' '<<a<<endl;
//cout<<ans[1]<<' '<<b<<endl;
//cout<<ans[2]<<' '<<c<<endl;
if(ans[1][0]<a && ans[1][1]<b && ans[1][2]<c)
{
nan++;
an[1]=1;
}
}
//2
{
p1[0][0]=sin(A-afa)*sin(A-afa);
p1[0][1]=sin(2*A-afa)*sin(A+C-afa);
p1[0][2]=-sin(A-afa)*sin(A+C-afa);
p1[1][0]=-sin(A-afa)*sin(A+C-afa);
p1[1][1]=sin(A-afa)*sin(A+C-B-afa);
p1[1][2]=sin(A+C-afa)*sin(A+C-afa);
p1[2][0]=sin(2*A-afa)*sin(A+C-afa);
p1[2][1]=-sin(2*A-afa)*sin(A+C-B-afa);
p1[2][2]=sin(A-afa)*sin(A+C-B-afa);
p2[0]=c*sin(A+C-afa);
p2[1]=a*sin(A+C-afa);
p2[2]=b*sin(2*A-afa);
dt=1.0/(sin(A-afa)*sin(A-afa)*sin(A+C-B-afa)+sin(2*A-afa)*sin(A+C-afa)*sin(A+C-afa));
for(i=0;i<3;i++)
{
ans[2][i]=p1[i][0]*p2[0]+p1[i][1]*p2[1]+p1[i][2]*p2[2];
ans[2][i]*=dt;
}
//cout<<ans[0]<<' '<<a<<endl;
//cout<<ans[1]<<' '<<b<<endl;
//cout<<ans[2]<<' '<<c<<endl;
if(ans[2][0]<a && ans[2][1]<b && ans[2][2]<c)
{
nan++;
an[2]=1;
}
}
//3
{
p1[0][0]=sin(A-afa)*sin(B-afa);
p1[0][1]=sin(A+B-afa)*sin(B+C-afa);
p1[0][2]=-sin(A-afa)*sin(B+C-afa);
p1[1][0]=-sin(B-afa)*sin(C-afa);
p1[1][1]=sin(B-afa)*sin(C-afa);
p1[1][2]=sin(B+C-afa)*sin(C-afa);
p1[2][0]=sin(A+B-afa)*sin(C-afa);
p1[2][1]=-sin(A+B-afa)*sin(C-afa);
p1[2][2]=sin(A-afa)*sin(C-afa);
p2[0]=c*sin(B+C-afa);
p2[1]=a*sin(A+C-afa);
p2[2]=b*sin(A+B-afa);
dt=1.0/(sin(A-afa)*sin(B-afa)*sin(C-afa)+sin(A+B-afa)*sin(B+C-afa)*sin(C-afa));
for(i=0;i<3;i++)
{
ans[3][i]=p1[i][0]*p2[0]+p1[i][1]*p2[1]+p1[i][2]*p2[2];
ans[3][i]*=dt;
}
//cout<<ans[0]<<' '<<a<<endl;
//cout<<ans[1]<<' '<<b<<endl;
//cout<<ans[2]<<' '<<c<<endl;
if(ans[3][0]<a && ans[3][1]<b && ans[3][2]<c)
{
nan++;
an[3]=1;
}
}
cout<<nan<<endl;
if(an[3]==1)
{
cout<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<x2+ans[3][0]/a*(x3-x2)<<' '
<<setiosflags(ios::fixed)<<setprecision(4)<<y2+ans[3][0]/a*(y3-y2)<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<x3+ans[3][1]/b*(x1-x3)<<' '
<<setiosflags(ios::fixed)<<setprecision(4)<<y3+ans[3][1]/b*(y1-y3)<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<x1+ans[3][2]/c*(x2-x1)<<' '
<<setiosflags(ios::fixed)<<setprecision(4)<<y1+ans[3][2]/c*(y2-y1)<<endl;
cout<<endl;
}
if(an[2]==1)
{
cout<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<x3+ans[2][1]/b*(x1-x3)<<' '
<<setiosflags(ios::fixed)<<setprecision(4)<<y3+ans[2][1]/b*(y1-y3)<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<x2+ans[2][0]/a*(x3-x2)<<' '
<<setiosflags(ios::fixed)<<setprecision(4)<<y2+ans[2][0]/a*(y3-y2)<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<x1+ans[2][2]/c*(x2-x1)<<' '
<<setiosflags(ios::fixed)<<setprecision(4)<<y1+ans[2][2]/c*(y2-y1)<<endl;
cout<<endl;
}
if(an[1]==1)
{
cout<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<x2+ans[1][0]/a*(x3-x2)<<' '
<<setiosflags(ios::fixed)<<setprecision(4)<<y2+ans[1][0]/a*(y3-y2)<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<x1+ans[1][2]/c*(x2-x1)<<' '
<<setiosflags(ios::fixed)<<setprecision(4)<<y1+ans[1][2]/c*(y2-y1)<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<x3+ans[1][1]/b*(x1-x3)<<' '
<<setiosflags(ios::fixed)<<setprecision(4)<<y3+ans[1][1]/b*(y1-y3)<<endl;
cout<<endl;
}
if(an[0]==1)
{
cout<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<x1+ans[0][2]/c*(x2-x1)<<' '
<<setiosflags(ios::fixed)<<setprecision(4)<<y1+ans[0][2]/c*(y2-y1)<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<x2+ans[0][0]/a*(x3-x2)<<' '
<<setiosflags(ios::fixed)<<setprecision(4)<<y2+ans[0][0]/a*(y3-y2)<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<x3+ans[0][1]/b*(x1-x3)<<' '
<<setiosflags(ios::fixed)<<setprecision(4)<<y3+ans[0][1]/b*(y1-y3)<<endl;
cout<<endl;
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator