题目:已知有n个点分布在三维空间,且各个点都有三种颜色中的一种,即’R’,’G’,’B’,每次输入格式为颜色和坐标,要求计算组成的最大三角形的面积
,另外该三角形需要满足的条件是三个点要么颜色完全相同,要么完全不同。输入示例:
5
R 0 0 0
G 92 14 7
R 0 4 0
R 0 0 3
G 12 16 8输出结果:
6.00000
# coding=utf-8
import sys
import math
# 计算两点间距离
def distance(a, b):
tmp = (a[1] - b[1])**2 + (a[2] - b[2])**2 + (a[3] - b[3])**2
return math.pow(tmp, 0.5)
# 计算三点构成的面积
def countArea(a, b, c):
line1 = distance(a, b)
line2 = distance(a, c)
line3 = distance(b, c)
p = (line1 + line2 + line3) / 2
return math.pow(p * (p - line1) * (p - line2) * (p - line3), 0.5)
def maxArea(data):
areas = []
for i in range(len(data)-2):
for j in range(i+1,len(data)-1):
for k in range(j+1,len(data)):
areas.append([ countArea(data[i],data[j],data[k]), data[i][0], data[j][0], data[k][0]])
areas.sort(key=lambda x:x[0],reverse=True)
# print(areas)
for x in areas:
if( ( x[1] == x[2] == x[3] ) or ( x[1] != x[2] and x[1] != x[3] and x[2] != x[3] ) ):
return x[0]
if __name__ == "__main__":
# 读取第一行的n
n = int(sys.stdin.readline().strip())
data = []
for i in range(n):
# 读取每一行
line = sys.stdin.readline().strip().split()
for i in range(1, 4):
line[i] = int(line[i])
data.append(line)
# print(data)
# data = [['R', 0, 0, 0],
# ['G', 92, 14, 7],
# ['R', 0, 4, 0],
# ['R', 0, 0, 3],
# ['G', 12, 16, 8]
# ]
# n = len(data)
# data.sort(key=lambda x:x[0])
if(n == 3):
print("%.5f"%countArea(data[0], data[1], data[2]))
else:
maxA = maxArea(data)
print("%.5f"%maxA)