sicily 1070. Hansel and Grethel

#include<iostream>        //求两直线交点
#include<stdio.h>

#include<cmath>
using namespace std;
#define pi acos(-1.0)
int main()
{
int cases;
double x1,y1,d1,x2,y2,d2,k1,k2,x,y;
cin>>cases;
while(cases--)
{
cin>>x1>>y1>>d1>>x2>>y2>>d2; //直线 y=kx+b
k1=tan((450-d1)*pi/180);k2=tan((450-d2)*pi/180); //计算斜率
x=(y2-k2*x2-(y1-k1*x1))/(k1-k2);

y=(k1*k2*x1-k1*k2*x2+k1*y2-k2*y1)/(k1-k2); //如果写成 y=k1*x+y1-k1*x1 是会WA,可能是因为x本身有误差
printf("%.4f %.4f\n",x,y);

}
return 0;
}

/*

题目规定 0 = North, 90 = East, 180 = South, 270 = West
0°->90° 90°->0° 180°->270° 270°->180°
相当于: 360°->90° 90°->360° 180°->270° 270°->180°
据此我们找出真正的角度值: 450°- d (d是输入的角度值)
转换成弧度来表示:( 450°- d )*π/180°
弧度的正切值 k=tanα即为直线斜率.

设两直线方程: y1=k1*x1+b1, y2=k2*x2+b2 交点坐标(x,y)
解得 x=(b2-b1)/(k1-k2), y=(k1*b2-k2*b1)/(k1-k2) ,其中 b2=y2-k2*x2,b1=y1-k1*x1 ,代入既得答案

*/

posted on 2011-07-12 11:18  sysu_mjc  阅读(238)  评论(0编辑  收藏  举报

导航