POJ 1254

题意:给两个点的x,y坐标以及当前点与他们的角度,求当前点的位置。

题解:每一个点的坐标与角度可以构成一条直线,然后求两直线交点。

View Code
 1 #include<cstdlib>

 2 #include<cmath>

 3 #include<cstdio>

 4 #include<algorithm>

 5 #define max(a,b) (((a)>(b))?(a):(b))

 6 #define min(a,b) (((a)>(b))?(b):(a))

 7 #define sign(x) ((x)>eps?1:((x)<-eps?(-1):(0))) //符号函数

 8 using namespace std;

 9 const int MAXN=1000;

10 const double eps=1e-8,inf=1e50,PI=acos(-1.0);

11 struct point

12 {

13     double x,y;

14     point(){}

15     point(double _x,double _y){x=_x;y=_y;}

16 };

17 struct line

18 {

19     point a,b;

20     line(){}

21     line(point _a,point _b){a=_a;b=_b;}

22 };

23 inline double xmult(point o,point a,point b)

24 {

25     return (a.x-o.x)*(b.y-o.y)-(b.x-o.x)*(a.y-o.y);

26 }

27 inline double xmult(double x1,double y1,double x2,double y2)

28 {

29     return x1*y2-x2*y1;

30 }

31 inline double dmult(point o,point a,point b)

32 {

33     return (a.x-o.x)*(b.x-o.x)+(a.y-o.y)*(b.y-o.y);

34 }

35 //求直线交点,必须存在交点,或者预判断

36 point line_intersection(line u,line v)

37 {

38     double a1=u.b.y-u.a.y,b1=u.a.x-u.b.x;

39     double c1=u.b.y*(-b1)-u.b.x*a1;

40     double a2=v.b.y-v.a.y,b2=v.a.x-v.b.x;

41     double c2=v.b.y*(-b2)-v.b.x*a2;

42     double D=xmult(a1,b1,a2,b2);

43     return point(xmult(b1,c1,b2,c2)/D,xmult(c1,a1,c2,a2)/D);

44 }

45 void counter (double &x,double &y,double th)

46 {

47 //绕原点逆时针旋转th弧度,顺时针则传入-th

48     double tx=x,ty=y;

49     x=tx*cos(th)-ty*sin(th);

50     y=tx*sin(th)+ty*cos(th);

51     return;

52 }

53 int main()

54 {

55     int T;

56     for(scanf("%d",&T);T;T--)

57     {

58         point a,b,c;

59         line u,v;

60         double d1,d2,x,y;

61         scanf("%lf%lf%lf",&a.x,&a.y,&d1);

62         scanf("%lf%lf%lf",&b.x,&b.y,&d2);

63         x=0,y=-1;

64         counter(x,y,-d1/180.0*PI);

65         u=line(a,point(a.x+x,a.y+y));

66         x=0,y=-1;

67         counter(x,y,-d2/180.0*PI);

68         v=line(b,point(b.x+x,b.y+y));

69         c=line_intersection(u,v);

70         printf("%.4lf %.4lf\n",c.x,c.y);

71     }

72     return 0;

73 }

你可能感兴趣的:(poj)