题目大意:给出两棵树的位置找到另外两棵,四点构成正方形。
构成正方形证明:侵删。UVa 10250 The Other Two Trees by 我叫空格_
解题思路:求出中点,把所给的两棵树的坐标绕中点旋转 90 度得到的坐标就是另外两棵。
(x, y) 绕 (0, 0) 顺时针转90度后坐标为 (y, -x)
(x, y) 绕 (p, q) 顺时针转90度:
先把 (p, q) 移到原点,化为求 (x-p, y-q) 绕 (0, 0)旋转 90 度,即 (y-q, p-x)
再移回原位,最终 (y-q+p, p-x+q)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
int main() {
double x1, y1, x2, y2;
while(scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2) != EOF) {
double x3, y3, x4, y4;
double x = (x1 + x2) / 2;
double y = (y1 + y2) / 2;
x3 = y1 - y + x; y3 = x - x1 + y;
x4 = y2 - y + x; y4 = x - x2 + y;
printf("%.10lf %.10lf %.10lf %.10lf\n", x3, y3, x4, y4);
}
return 0;
}