题意是给你一个正方形两个对角顶点坐标,求其它两个坐标。
如图:
直接可以计算另两个顶点了:
y1 - y2 = a + b.
x2 - a = x1 - b.
联立上式,解出a,b,剩下的就ko了。
注意impossible的情况,就是输入的两个点在同一点。
代码:
#include <stdio.h>
#include <math.h>
const double eps = 1e-10;
int main()
{
double x1, y1, x2, y2;
while (scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2) == 4)
{
if (fabs(x1 - x2) < eps && fabs(y1 - y2) < eps)
{
printf("Impossible.\n");
continue;
}
double a = (y1 - y2 + x2 - x1) / 2;
double b = (y1 - y2 - x2 + x1) / 2;
double x3 = x2 - a;
double y3 = y2 + b;
double x4 = x2 + b;
double y4 = y2 + a;
printf("%.10lf %.10lf %.10lf %.10lf\n", x3, y3, x4, y4);
}
return 0;
}