首页 > 试题广场 >

正三角形的顶点位置

[编程题]正三角形的顶点位置
  • 热度指数:1334 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给出直角三角坐标平面上三角形其中两个顶点的坐标,求第三个顶点的坐标,要求保留小数点后两位小数


输入描述:
有多组测试数据,输入的第一行是整数T(1≤T≤200)表示随后测试数据的组数。

每组测试数据占一行,由4个带两位小数由一个空格隔开的实数构成,表示已知的两个顶点的横纵坐标。


输出描述:
对应每组测试数据,输出对应的第三个顶点(两组解),如果两组解的横坐标不相等,则先输出横坐标较小的顶点,否则输出纵坐标较小的顶点,每组输出占一行,输出保留两位小数
示例1

输入

3
12.00 3.00 12.00 9.00
12.00 3.00 24.00 3.00
1.00 2.00 3.00 4.00

输出

6.80 6.00 17.20 6.00
18.00 -7.39 18.00 13.39
0.27 4.73 3.73 1.27
对于数值计算和用到公式的地方,python比java要方便很多,适合在时间紧迫的面试时候用
from math import sqrt
for i in range(int(input())):
    points = list(map(float, input().split()))
    value = [points[2] - points[0], points[3] - points[1]]
    side1 = [points[0] + value[0] / 2 - value[1] * sqrt(3) / 2, points[1] + value[1] / 2 + value[0] * sqrt(3) / 2] #c和d一左一右
    side2 = [points[0] + value[0] / 2 + value[1] * sqrt(3) / 2, points[1] + value[1] / 2 - value[0] * sqrt(3) / 2] #c和d一左一右
    if value[1] > 0:
        result = (side1[0], side1[1], side2[0], side2[1])
    elif value[1] < 0:
        result = (side2[0], side2[1], side1[0], side1[1])
    else:
        result = (side1[0], min(side1[1], side2[1]), side2[0], max(side1[1], side2[1]))
    print("%.2f %.2f %.2f %.2f" % result)

发表于 2021-03-31 16:39:40 回复(0)