*# Audio 牛客等级之题N2(8.18场)
链接:https://ac.nowcoder.com/acm/contest/7142/A
来源:牛客网
题目描述
Nancy很喜欢音乐。
她能同时分辨出三种不同的音乐。恰巧,一座城市中有三处同时有交响音乐会(音源响度相同)。但是Nancy每一场都不想错过,于是她想寻找一个地点,使得三处音乐会声音的响度相同,这样她就可以同时欣赏三场音乐会啦!
(注:假设声音传播过程中不会受障碍物作用,声音传播满足平方反比定律)
输入描述:
共三行:每行两个整数xix_ixi与yiy_iyi,三点不共线。 数据满足:0≤∣xi∣,∣yi∣≤10^9 。
输出描述:
共一行:两个实数posx,posypos_x, pos_yposx,posy,表示Nancy欣赏音乐会的地点(保留三位小数)
示例1
输入
0 0 1 3 4 2
输出
2.000 1.000
分析
读完题目,我们可以很清楚的知道这道题目要我们求的就是三角形的外心,那么什么是三角形的外心呢?
三角形外心
定义
三角形外心是指三角形外接圆的圆心,也就是三角形三边垂直平分线的交点,三角形的三个顶点就在这个外接圆上。
求法
解法一:
设三角形三边及其对角分别为a、b、c,∠A、∠B、∠C
正弦定理有r=a/(2sinA)=b/(2sinB)=c/(2sinC)
r=abc/(4S△ABC)
三角形外心的向量关系
向量PA的模=向量PB的模=向量PC的模(ABC为三角形三个顶点,P为外心)
解法二:
给定a(x1,y1) b(x2,y2) c(x3,y3)求外接圆心坐标O(x,y)
1、首先,外接圆的圆心是三角形三条边的垂直平分线的交点,我们根据圆心到顶点的距离相等,可以列出以下方程:
(x1-x)(x1-x)+(y1-y)(y1-y)=(x2-x)(x2-x)+(y2-y)(y2-y);
(x2-x)(x2-x)+(y2-y)(y2-y)=(x3-x)(x3-x)+(y3-y)(y3-y);
2、化简得到:
2*(x2-x1)x+2(y2-y1)y=x22+y2-x12-y2;
2*(x3-x2)x+2(y3-y2)y=x32+y32-x22-y22;
令:A1=2*(x2-x1);
B1=2*(y2-y1);
C1=x22+y22-x12-y12;
A2=2*(x3-x2);
B2=2*(y3-y2);
C2=x32+y32-x22-y22;
即:A1x+B1y=C1;
A2x+B2y=C2;
3、最后根据克拉默法则:
x=((C1B2)-(C2B1))/((A1B2)-(A2B1));
y=((A1C2)-(A2C1))/((A1B2)-(A2B1));
因此,x,y为最终结果;
解法
通过分析可以得出三角形的外心的两个求法,我们可以利用解法二来解答本题,代码如下:
代码
x1,y1 = input().split(" ") x2,y2 = input().split(" ") x3,y3 = input().split(" ") x1,x2,x3,y1,y2,y3 = float(x1),float(x2),float(x3),float(y1),float(y2),float(y3) A1 = 2 * (x2 - x1) B1 = 2 * (y2 - y1) C1 = x2**2 + y2**2 - x1**2 - y1**2 A2 = 2 * (x3 - x2) B2 = 2 * (y3 - y2) C2 = x3**2 + y3**2 - x2**2 - y2**2 x = ((C1 * B2) - (C2 * B1))/((A1 * B2) - (A2 * B1)) y = ((A1 * C2) - (A2 * C1))/((A1 * B2) - (A2 * B1)) #注意输出格式,保留三位小数 print('%.3f'%x,'%.3f'%y)