📜  门|门 IT 2005 |第 69 题(1)

📅  最后修改于: 2023-12-03 14:58:35.709000             🧑  作者: Mango

门|门 IT 2005 |第 69 题

本次题目是一道经典的计算几何题目,需要程序员掌握基本的几何运算和数学知识。

题目描述

平面上有一个正方形,给定其中一条对角线的两个端点,请计算出另外两个顶点的坐标。

输入格式

输入共一行,包含四个整数,表示对角线两个端点的坐标。

输出格式

输出共两行,每行两个整数,表示正方形的另外两个顶点的坐标,按照从左到右、从上到下的顺序输出。

样例输入
0 0 2 2
样例输出
2 0
0 2
解题思路

对于一个正方形,对角线的长度等于 $\sqrt{2}$ 倍的边长,因此可以通过对角线的长度和其中一点的坐标推出正方形的另外两个顶点的坐标。

假设对角线的两个端点分别为 $(x_1,y_1)$ 和 $(x_2,y_2)$,则对角线的长度为 $d=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2}$。

正方形的边长为 $l=d/\sqrt{2}$,正方形的中心点的坐标为 $((x_1+x_2)/2,(y_1+y_2)/2)$,因此正方形的另外两个顶点可以通过中心点和边长计算出来。

设正方形中心点的坐标为 $(x_c,y_c)$,则正方形的另外两个顶点的坐标分别为 $(x_c-l/2,y_c+l/2)$ 和 $(x_c+l/2,y_c-l/2)$。

将以上计算公式转化为代码实现,即可得到本题的解答。

代码实现
import math

x1, y1, x2, y2 = map(int, input().split())
d = math.sqrt((x2-x1)**2 + (y2-y1)**2)
l = d / math.sqrt(2)
xc, yc = (x1+x2)/2, (y1+y2)/2
x3 = xc - l/2
y3 = yc + l/2
x4 = xc + l/2
y4 = yc - l/2
print(int(x3), int(y3))
print(int(x4), int(y4))

以上代码使用了 Python 语言实现了本题的解答,其中使用了 math 库中的 sqrt 函数计算平方根。

对于输入和输出格式,可以使用 Python 的 input 和 print 函数实现。