您的位置:首页 > 其它

UVA - 10250 The Other Two Tree

2014-12-18 21:14 393 查看
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19096

这题做的很艰难,真有点高中白读了的感觉,一些基本东西快忘完了都!

给定一块对边相等的土地,然后每条边的每个方向都有一快邻居的土地与你共用一条边,邻居土地都是正方形,给定对边邻居土地的中心点,求另两块土地的中心点。

抽象出来,就是给定正方形的一对对立顶点,求另外一对顶点。

证明四个中心点是正方形是利用全等三角形,边角边证明。



之后用向量的方法,把其余顶点求出来。假设已知点为 A(x1,y1) C(x2,y2) 则向量 P=AC=(px,py)=(x2-x1,y2-y1); 因为BD与AC垂直且

中点坐标为C=(cx,cy)=( (x1+x2)/2, (y1+y2)/2 ) 得出两点坐标一个是 C+ (py,-px) /2 一个是 C - (py,px)/2 .知道中点和BD的向量就可以求出BD的坐标,点按向量平移。

#include<cstdio>
#include<cmath>
#define eps 1e-8
int main()
{
double x1,y1,x2,y2;
while(~scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2))
{
if(fabs(x1-x2)<eps&&fabs(y1-y2)<eps)  //不能构成正方形
{
printf("Impossible.\n");
continue;
}
double px=(x1-x2)/2,py=(y1-y2)/2;
double cx=(x1+x2)/2,cy=(y1+y2)/2;
printf("%.10lf %.10lf %.10lf %.10lf\n",cx+py,cy-px,cx-py,cy+px);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: