这道题用 Latex 重新写了一下
这是一道纯平面几何题,高中时候最喜欢的数学竞赛的一块知识!!!
硬要说什么难度的话,初中数学竞赛的知识点,入门级平面几何吧。。。(而现在的我太过愚蠢。。。)
图中的圆是,过B,C点并与△ABC相切与B,C的圆
这道题答案是
高+
BC⌢
的长度
这道题就是一个简单的托勒密定理+切线定理
那么我们要证明的就是∠BPM+∠APC=180∘
下面是证明:
我们延长AP交圆于D,连接CD.
我们要证明:∠DPC=∠BPM
∵B,P,C,D四点共圆,∴∠PBC=∠PDC,我们只需要证明△BPM∼△DPC即可。
所以我们只需证:PBPD=BMCD⟺PB∗CD=BM∗PD
∵P,B,C,D四点共圆,∴我们由托勒密定理:PD∗BC=PB∗CD+PC∗BD。
因为BC=2∗BM,所以我们化简PD∗BC=PD∗BM∗2=PB∗CD∗2
∵PD∗BC=PB∗CD+PC∗BD。
∴我们只需证PC∗BD=PB∗CD。即PCCD=PBBD。
∵AB分别为圆的切线,所以△ABP与△ADB相似,
∴PBBD=APAB。
同理:PCPD=APAC。
∵切线AB,AC交于A∴AB=AC(直接等腰三角形也可)。
所以我们证出了PCCD=PBBD。
综上:得证:∠BPM+∠APC=180∘
下面找轨迹的过程就是高中数学竞赛题了。
下面我们来证明:∠BPM+∠APC=180∘时,p点的轨迹一定在一个圆上。
延长AP,做∠PDC=∠ACP,那么△APC∼△ACD。
∴AB2=AC2=AP∗AD。∴△APB∼△ABD
∠PDC=∠A。PBPD=PCPM。P,C,B,D四点共圆。
∵P,C,B,D四点共圆。∴由托勒密定理:PD∗BC=PB∗CD+PC∗BD。
∵BM=CMandPBPD=PCPM。
∴PCCD=PBBD即PC∗BD=CD∗PB。
那么我们发现:四边形P,B,C,D是调和四边形。那么由调和四边形的性质:DP,过B做P,B,C,D的外接圆的切线
,过C做P,B,C,D外接圆的切线,三线共点,我们做BC垂直平分线交DP延长线与A′点。
那么A′B,A′C即使四边形P,B,C,D的外接圆的切线,由于DP与垂直平分线交于A,
所以A′与A重合(两条直线不可能有两个交点,反正法可证),那么我们题目就做完了,
我们这里反正法可得,AC,AB是四边形P,B,C,D的外接圆的切线,
此时做BO垂直AB,CO垂直AC交于O点,此时P的轨迹就是以OB为半径,⨀O的BC⌢。
证毕。
附上代码(队友写的)
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cstdio>
#include<vector>
#include<cmath>
#include<map>
#define pi (2*acos(0))
#define maxn 1000000
using namespace std;
int main()
{
int t;
scanf("%d", &t);
for (int k=1;k<=t;k++)
{
double ax, ay, bx, by, cx, cy;
scanf("%lf%lf%lf%lf%lf%lf", &ax, &ay, &bx, &by, &cx, &cy);
double t1 = (ax - bx) * (ax - bx) + (ay - by) * (ay - by);
double ab = sqrt(t1);
double t2 = (bx - cx) * (bx - cx) + (by - cy) * (by - cy);
double bc = sqrt(t2);
double h = sqrt(t1 - t2/4);
double angle = acos(bc/(2.0*ab));
double d = bc / sin(angle);
double ans = 0;
ans = d * angle;
ans = ans + h;
printf("Case #%d: %.4f\n", k, ans);
}
return 0;
}