10250 The Other Two Trees

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1191

其实就是直角坐标系中有个正方形,给了对角的两个顶点的坐标,求另外两个顶点的坐标.

刚开始想了好长时间,想到了以前的几何方法,不就是解方程嘛,哎,计算机太笨,你写给它它不认识.......还是人类聪明啊!

用几何的方法,比如,可以得到两点的中垂线,然后就是在那条直线上取两点使得离中点的距离为一个值(这个值很容易啦).可是难道在直线上for循环?++?还是+0.1?反正确定不了点.

然后网上看了一下别人的.领悟了:

要求这两个点,枚举这两个点肯定是行不通的,只能利用点之间的关系了,直角坐标系,最好的就是和坐标系平行的线了,只要知道了距离,这条线上的点很容易确定.于是有了全等三角形.

下图:

这样就简单了:

#include <stdio.h>

int main(void)
{
    double x1,y1,x2,y2;
    while (scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2)!=EOF)
    {
        if (x1==x2&&y1==y2)
        {
            printf("Impossible.\n");
        } 
        else
        {
            double x3,y3,x4,y4,x,y;
            x=(x1+x2)/2,y=(y1+y2)/2;

            y3=x-x1+y;
            x3=y1-y+x;
            y4=y+x-x2;
            x4=x-y+y2;

            printf("%.10f %.10f %.10f %.10f\n",x3,y3,x4,y4);
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/jiayith/p/3060942.html