UVA - 10250 The Other Two Tree

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;
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章