题目:判断三点能否构成三角形及计算周长和面积
问题描述
有一个平面,上面有三个点,坐标分别为(x1,y1)、(x2,y2)、(x3,y3)。我们需要:
判断这三个点能否构成三角形。
如果不能构成三角形,输出 Impossible。
如果可以构成三角形,输出其周长和面积,结果保留小数点后2位。
输入输出格式
输入格式:
在一行中顺序给出六个 [-100, 100] 范围内的数字,即三个点的坐标 x1,y1,x2,y2,x3,y3。
输出格式:
输入样例1
4 5 6 9 7 8
输出样例1
L = 10.13, A = 3.00
输入样例2
4 6 8 12 12 18
输出样例2
Impossible
参考分析
1. 共线判断(能否构成三角形)
三个点不能构成三角形的唯一情况是:三点共线。
我们可以通过向量叉积来判断三点是否共线。设向量 AB=(x2−x1,y2−y1),向量 AC=(x3−x1,y3−y1)。
它们的叉积为:它们的叉积为:cross=(x2−x1)×(y3−y1)−(y2−y1)×(x3−x1)
2. 周长计算
三角形的周长就是三条边长度之和。我们可以使用两点间距离公式来计算每条边的长度:
在Python中,math.hypot() 函数可以直接帮我们完成这个计算。
3. 面积计算
我们可以使用著名的海伦公式来计算三角形的面积。
先计算半周长 s = 周长/2。
再代入公式:
其中 a, b, c是三角形的三条边长。
考查知识点
几何基础:理解三点共线的判定条件、两点间距离公式和三角形面积公式。
浮点数精度处理:在判断共线时,不能直接与0比较,而是要判断其绝对值是否小于一个很小的数(如 10^-8)。
数学公式转化为代码:将抽象的数学公式,如海伦公式,转化为可执行的Python代码。
代码实现
import mathcoords = list(map(float, input().split()))x1, y1, x2, y2, x3, y3 = coords# 计算向量叉积,判断三点是否共线cross = (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1)if abs(cross) < 1e-8: print("Impossible")else: # 计算三边长度 d1 = math.hypot(x2 - x1, y2 - y1) d2 = math.hypot(x3 - x2, y3 - y2) d3 = math.hypot(x1 - x3, y1 - y3) # 周长 perimeter = d1 + d2 + d3 # 海伦公式求面积 s = perimeter / 2 area = math.sqrt(s * (s - d1) * (s - d2) * (s - d3)) # 格式化输出 print(f"L = {perimeter:.2f}, A = {area:.2f}")
代码说明
输入处理:读取一行输入,将其转换为6个浮点数,分别代表三个点的坐标。
共线判断:计算向量叉积 cross,如果其绝对值小于 10^-8,则判定为共线,输出 Impossible。
边长计算:使用 math.hypot() 函数计算三条边的长度。
周长与面积计算:将三边长相加得到周长,再使用海伦公式计算面积。
格式化输出:使用 :.2f 格式化字符串,确保输出结果保留两位小数,符合题目要求。