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