Реши 3 задачу по геометрии без координат!

作成日: 2026年4月15日

使用モデル GPT-5.4 Thinking by Chat01

質問

IMG_20260415_165219_571.jpg

Реши 3 задачу по геометрии без координат!

Python

python
import sympy as sp # choose sample b=7,c=5 angle A=60 b=7 # AC c=5 # AB a=(b*b+c*c-b*c)**0.5 a 6.244997998398398

Python

python
sqrt3=sp.sqrt(3) A=sp.Point(0,0) B=sp.Point(c,0) C=sp.Point(b/2,b*sqrt3/2) a=sp.sqrt(b**2+c**2-b*c) # param point on BC at distance t from B def point_on_BC_from_B(t): return sp.Point(B.x + (C.x-B.x)*t/a, B.y + (C.y-B.y)*t/a) X=point_on_BC_from_B(c/2) Y=point_on_BC_from_B(a-b/2) sp.simplify(X.x), sp.simplify(X.y), sp.simplify(Y.x), sp.simplify(Y.y) (5 - 5*sqrt(39)/52, 35*sqrt(13)/52, 7*sqrt(39)/52 + 7/2, -49*sqrt(13)/52 + 7*sqrt(3)/2)

Python

python
[X.evalf() for X in (X,Y,C)] [Point2D(4.39951942323092, 2.42681335848538), Point2D(4.34067280747671, 2.66463912461154), Point2D(3.50000000000000, 6.06217782649107)]

Python

python
# compute incenter and excenters triangle = sp.geometry.Triangle(A,B,C) I = triangle.incenter r = triangle.incircle.radius I, sp.N(I), sp.N(r) (Point2D(6 - sqrt(39)/2, -sqrt(13)/2 + 2*sqrt(3)), Point2D(2.87750100080080, 1.66132597740576), 1.66132597740576)

Python

python
exc = triangle.excircles [(e.center.evalf(), e.radius.evalf()) for e in exc]

Python

python
import sympy as sp b=sp.Integer(7); c=sp.Integer(5); a=sp.sqrt(39) A=sp.Point(0,0) B=sp.Point(c,0) C=sp.Point(b/2,b*sp.sqrt(3)/2) def bary_point(weights, points=[A,B,C]): sx=sum(w*p.x for w,p in zip(weights,points)) sy=sum(w*p.y for w,p in zip(weights,points)) s=sum(weights) return sp.Point(sp.simplify(sx/s), sp.simplify(sy/s)) Ia=bary_point([-a,b,c]) Ib=bary_point([a,-b,c]) Ic=bary_point([a,b,-c]) Ia.evalf(), Ib.evalf(), Ic.evalf() (Point2D(9.12249899919920, 5.26687725286975), Point2D(-4.12249899919920, 7.14037772076486), Point2D(2.12249899919920, -3.67627610562711))

Python

python
s=(a+b+c)/2 area = b*c*sp.sqrt(3)/4 r = sp.simplify(area/s) ra = sp.simplify(area/(s-a)) rb = sp.simplify(area/(s-b)) rc = sp.simplify(area/(s-c)) sp.N(r), sp.N(ra), sp.N(rb), sp.N(rc) (1.66132597740576, 5.26687725286975, 7.14037772076486, 3.67627610562711)

Python

python
import sympy as sp, math # numeric values b=7.0; c=5.0; a=math.sqrt(b*b+c*c-b*c) A=(0.0,0.0); B=(c,0.0); C=(b/2,b*math.sqrt(3)/2) def pt_from_B(t): return (B[0]+(C[0]-B[0])*t/a, B[1]+(C[1]-B[1])*t/a) X=pt_from_B(c/2) Y=pt_from_B(a-b/2) X,Y ((4.399519423230923, 2.426813358485377), (4.340672807476707, 2.664639124611542))

Python

python
import numpy as np, math X=np.array(X); Y=np.array(Y) mid=(X+Y)/2 v=Y-X d=np.array([-v[1], v[0]]) # direction perp d=d/np.linalg.norm(d) I=np.array([2.87750100080080, 1.66132597740576]); r=1.66132597740576 Ia=np.array([9.12249899919920,5.26687725286975]); ra=5.26687725286975 Ib=np.array([-4.12249899919920,7.14037772076486]); rb=7.14037772076486 Ic=np.array([2.12249899919920,-3.67627610562711]); rc=3.67627610562711 def check(E,er): arr=[] for t in np.linspace(-50,50,20001): O=mid+t*d R=np.linalg.norm(O-X) vals=[] for s1 in [1,-1]: for s2 in [1,-1]: vals.append((abs

Python

python
t=sp.symbols('t', real=True) mid_sp = sp.Point(*map(sp.nsimplify,mid)) d_sp = sp.Point(*map(sp.nsimplify,d)) O = sp.Point(mid[0] + t*d[0], mid[1] + t*d[1]) R = sp.sqrt((O.x-X[0])**2 + (O.y-X[1])**2) eqI = sp.expand((sp.sqrt((O.x-I[0])**2 + (O.y-I[1])**2)-R)**2 - r**2) eqA = sp.expand((sp.sqrt((O.x-Ia[0])**2 + (O.y-Ia[1])**2)-R)**2 - ra**2) # nsolve combinations on polynomial-like but with sqrts for guess in [-20,-10,-5,-2,-1,0,1,2,5,10,20]: try: root=sp.nsolve([eqI,eqA],[t],[guess], tol=1e-14, maxsteps=100) print("guess",guess,root) except Exception as e: pass

Python

python
def solve_t(E,er): eqE = sp.expand((sp.sqrt((O.x-E[0])**2 + (O.y-E[1])**2)-R)**2 - er**2) roots=set() for guess in [-10,-5,-2,-1,-.5,0,.5,1,2,5,10]: try: root=float(sp.nsolve([eqI,eqE],[t],[guess], tol=1e-16, maxsteps=100)[0]) if abs(root)<1e6: roots.add(round(root,12)) except Exception as e: pass return roots for E,er,name in [(Ia,ra,'a'),(Ib,rb,'b'),(Ic,rc,'c')]: print(name, solve_t(E,er))

Python

python
tval=-0.0707248301631137 O_num=mid+tval*d R_num=np.linalg.norm(O_num-X) O_num,R_num (array([4.4387505, 2.5627138]), np.float64(0.14144966032623316))

Python

python
np.linalg.norm(X-Y) np.float64(0.24499799839839853)

Python

python
def distpt(P,Q): return float(np.linalg.norm(np.array(P)-np.array(Q))) for P,name in [(I,'I'),(Ia,'Ia')]: print(name, distpt(O_num,P), "difference", distpt(O_num,P)-R_num) # collinearity def area2(P,Q,R): P=np.array(P);Q=np.array(Q);R=np.array(R) return np.cross(Q-P,R-P) print("collinearity I O Ia", area2(I,O_num,Ia))

Python

python
# distance to A distpt(X,A), distpt(Y,A) (5.024459596047045, 5.093303651460247)

Python

python
def power(P,Center,r): P=np.array(P);Center=np.array(Center) return np.dot(P-Center,P-Center)-r*r for P,name in [(X,'X'),(Y,'Y')]: print(name, power(P,I,r), power(P,Ia,ra))

Python

python
distpt(I,Ia), r+ra, ra-r (7.211102550927981, 6.9282032302755105, 3.60555127546399)

Python

python
a=float(sp.sqrt(39)); b=7;c=5 BH=a*c/(b+c); BD=(a-b+c)/2; BE=(a+b-c)/2 BH,BD,BE,(BD+BE)/2 (2.6020824993326657, 2.122498999199199, 4.122498999199199, 3.122498999199199)

Python

python
# compute AH AH = b*c*math.sqrt(3)/(b+c) # angle bisector length formula? Actually maybe yes from area; let's check. AH 5.0518148554092255

Python

python
a=math.sqrt(39); b=7;c=5 BH=a*c/(b+c) HX=BH-c/2 HY=(a-b/2)-BH HI = math.sqrt((BH-BD)*(BE-BH)) if True else None # actually power at H to incircle gives HI^2-r^2 = HD^2. BD=(a-b+c)/2 HI=math.sqrt((BH-BD)**2 + ( (b+c-a)/(2*math.sqrt(3)) )**2 ) HX,HY,HI (0.10208249933266567, 0.14291549906573264, 1.7291629005977054)

Python

python
# compute O on AI with OI=a/(2sqrt3) OI=a/(2*math.sqrt(3)) # need direction along AI from I to A? Distance AI maybe? formula angle bisector length: AI=math.sqrt(b*c*(1-a*a/(b+c)**2)) AI 5.0518148554092255

Python

python
# compute H coordinates from sympy.geometry import Line H = Line(A, I).intersection(Line(B,C))[0] H.evalf() Point2D(4.37500000000000, 2.52590742770461)

Python

python
import numpy as np, math def angle(u,v): return math.degrees(math.acos(np.dot(u,v)/(np.linalg.norm(u)*np.linalg.norm(v)))) print(angle(X-O_num, I-O_num), angle(Y-O_num, I-O_num), angle(X-O_num, Ia-O_num))

Python

python
import sympy as sp a=sp.sqrt(39); b=sp.Integer(7); c=sp.Integer(5) expr = c/2 + a - b/2 - 2*a*c/(b+c) sp.simplify(expr) -1 + sqrt(39)/6

Python

python
distpt(O_num,B), c/2, distpt(O_num,C), b/2 (2.623452496692555, 5/2, 3.6231893410089406, 7/2)

Python

python
# compute some angles A_np=np.array(A, dtype=float); B_np=np.array(B, dtype=float); C_np=np.array(C, dtype=float) def ang(P,Q,R): P=np.array(P);Q=np.array(Q);R=np.array(R) return angle(P-Q,R-Q) print("AOX",ang(A,O_num,X), "BOX", ang(B,O_num,X), "COY", ang(C,O_num,Y))

Python

python
import math, numpy as np I=np.array([2.87750100080080,1.66132597740576]) np.linalg.norm(I) np.float64(3.3226519548115188)

Python

python
a,b,c=sp.symbols('a b c', positive=True) mx=sp.symbols('mx') expr = (b**2*(c/2) + c**2*(a-c/2))/a - (c/2)*(a-c/2) sp.expand(expr) -a*c/2 + 5*c**2/4 + b**2*c/(2*a) - c**3/(2*a)

Python

python
expr2 = sp.expand(expr.subs(b**2,a**2-c**2+b*c)) sp.factor(expr2) c**2*(5*a + 2*b - 4*c)/(4*a)

Python

python
print(ang(X,O_num,Y))

Python

python
# equilateral apexes on XY Xv=np.array(X);Yv=np.array(Y) m=(Xv+Yv)/2 vec=Yv-Xv # rotate vec/2 by +/- 90*? apex = m +/- sqrt(3)/2 * perp? Actually equilateral on segment XY perp=np.array([-(vec[1]), vec[0]]) perp=perp/np.linalg.norm(perp) Z1=m + math.sqrt(3)/2*np.linalg.norm(vec)*perp Z2=m - math.sqrt(3)/2*np.linalg.norm(vec)*perp Z1,Z2, I, O_num (array([4.16413296, 2.49476358]), array([4.57605927, 2.59668891]), array([2.877501 , 1.66132598]), array([4.4387505, 2.5627138]))

Python

python
print(ang(X,A,Y))

Python

python
for P,name in [(I,'I'),(Ia,'Ia'),(A,'A')]: print(name, ang(X,P,Y))

Python

python
import numpy as np, math def rot(P,deg): th=math.radians(deg) R=np.array([[math.cos(th), -math.sin(th)], [math.sin(th), math.cos(th)]]) return R.dot(np.array(P)) for deg in [60,-60]: print("rot X",deg, rot(X,deg)) print("rot Y",deg, rot(Y,deg))

Python

python
a=float(sp.sqrt(39)); b=7;c=5 XD=(b-a)/2 YD=(a-c)/2 XE=(2*c-a-b)/2 YE=(a-2*b+c)/2 XD*YD, XE*YE (0.2349939951951946, 2.2349939951951945)

Python

python
# angle between OX and BC direction BC_dir=C_np-B_np print(angle(O_num-X, BC_dir), angle(O_num-Y, -BC_dir))

Python

python
# test cyclic ABOX def circle_from3(P,Q,R): return sp.Circle(sp.Point(*P), sp.Point(*Q), sp.Point(*R)) circ = circle_from3(A,B,O_num) float(circ.distance(sp.Point(*X)))

Python

python
# use determinant maybe import numpy as np, math A_np=np.array(A,float); B_np=np.array(B,float) def is_cyclic(P,Q,R,S): # compute oriented angles return ang(P,Q,R)+ang(P,S,R) print(ang(A,B,O_num)+ang(A,X,O_num), ang(A,O_num,B)+ang(A,X,B))

Python

python
print("∠BAO",ang(B,A,O_num),"∠BXO",ang(B,X,O_num)) print("∠BOA",ang(B,O_num,A),"∠BXA",ang(B,X,A))

Python

python
print("∠OAB",ang(O_num,A,B),"∠OXB",ang(O_num,X,B)) print("∠OAC",ang(O_num,A,C),"∠OYC",ang(O_num,Y,C))

Python

python
# check if O on circumcircle ABX and ACY circ1=sp.Circle(sp.Point(*A), sp.Point(*B), sp.Point(*X)) circ2=sp.Circle(sp.Point(*A), sp.Point(*C), sp.Point(*Y)) def power_to_circle(P,circle): center=np.array(circle.center.evalf(), dtype=float) rad=float(circle.radius.evalf()) P=np.array(P, dtype=float) return np.linalg.norm(P-center)**2-rad**2 print(power_to_circle(O_num,circ1), power_to_circle(O_num,circ2)) print(circ1.center.evalf(),circ1.radius.evalf()) print(circ2.center.evalf(),circ2.radius.evalf())

Python

python
for expr,name in [((B,O_num,X),'BOX'),((B,A,Y),'BAY'),((C,O_num,Y),'COY'),((C,A,X),'CAX'),((X,O_num,A),'XOA'),((B,C,A),'BCA')]: P,Q,R=expr print(name, ang(P,Q,R))

Python

python
print("XOA",ang(X,O_num,A),"C", ang(B,C,A)) print("AOY",ang(A,O_num,Y),"B", ang(A,B,C))

Python

python
# foot N from O to BC Bpt=np.array(B,float); Cpt=np.array(C,float); Opt=O_num v=Cpt-Bpt t=np.dot(Opt-Bpt,v)/np.dot(v,v) N=Bpt+t*v BN=t*np.linalg.norm(v); CN=(1-t)*np.linalg.norm(v) BN, CN, (c/2 + (a-b/2))/2, N (np.float64(2.6224989991991987), np.float64(3.622498999199199), 2.622498999199199, array([4.37009612, 2.54572624]))

Python

python
# angle between AI and BC AIvec=I-A_np BCvec=C_np-B_np print(angle(AIvec,BCvec))

Python

python
a,b,c=sp.symbols('a b c', positive=True) expr = sp.sqrt(3)*b*c/(b+c) - (b+c-a)/sp.sqrt(3) # use a^2 relation maybe factor expr_sub = sp.together(expr).subs(3*b*c,(a+b+c)*(b+c-a)) sp.factor(sp.simplify(expr_sub)) -sqrt(3)*a*(a - b - c)/(3*(b + c))

Python

python
a,b,c=sp.symbols('a b c', positive=True) BH = a*c/(b+c) HN = (b-c)*(b+c-2*a)/(4*(b+c)) expr = sp.simplify(BH + HN - (2*a + c - b)/4) sp.factor(expr) -(b - c)*(2*a - b - c)/(2*(b + c))

Python

python
a,b,c=sp.symbols('a b c', positive=True) BN_expr = a*c/(b+c) + (2*a-b-c)*(b-c)/(4*(b+c)) sp.factor(sp.simplify(BN_expr - (2*a + c - b)/4)) 0

Python

python
# angle BHA H=np.array([4.375,2.52590742770461]) print(ang(B_np,H,A_np), ang(A_np,H,Cpt))

思考

angle BHA

H=np.array([4.375,2.52590742770461]) print(ang(B_np,H,A_np), ang(A_np,H,Cpt))

Thought for 30m 23s

回答

Обозначим

a=BC,b=CA,c=AB.a=BC,\qquad b=CA,\qquad c=AB.

Тогда по условию

BX=c2,CY=b2,BX=\frac c2,\qquad CY=\frac b2,

а из A=60\angle A=60^\circ по теореме косинусов

a2=b2+c2bc.a^2=b^2+c^2-bc.

Без ограничения общности будем считать b>cb>c (иначе просто поменяем местами BB и CC, а вместе с ними и X,YX,Y).


1. Вписанная и AA-вневписанная окружности

Пусть ω\omega — вписанная окружность, ωa\omega_a — вневписанная окружность, касающаяся стороны BCBC, а их центры — II и IaI_a.

Площадь треугольника:

S=bcsin602=34bc.S=\frac{bc\sin60^\circ}{2}=\frac{\sqrt3}{4}bc.

Полупериметр:

s=a+b+c2.s=\frac{a+b+c}{2}.

Тогда радиусы равны

r=Sa,точнее r=Ss,ra=Ssa.r=\frac Sa,\quad\text{точнее }r=\frac{S}{s},\qquad r_a=\frac{S}{s-a}.

Но

(a+b+c)(b+ca)=(b+c)2a2=3bc,(a+b+c)(b+c-a)=(b+c)^2-a^2=3bc,

поэтому

r=3bc2(a+b+c)=b+ca23,r=\frac{\sqrt3\,bc}{2(a+b+c)}=\frac{b+c-a}{2\sqrt3}, ra=3bc2(b+ca)=a+b+c23.r_a=\frac{\sqrt3\,bc}{2(b+c-a)}=\frac{a+b+c}{2\sqrt3}.

Так как II и IaI_a лежат на биссектрисе AIAI, имеем

AI=2r,AIa=2ra.AI=2r,\qquad AI_a=2r_a.

2. Построим нужную окружность

Возьмём на луче AIAI точку OO так, что

OI=a23.OI=\frac{a}{2\sqrt3}.

Положим

ρ=2abc23.\rho=\frac{2a-b-c}{2\sqrt3}.

Заметим, что ρ>0\rho>0, потому что

4a2(b+c)2=3(bc)2>02a>b+c.4a^2-(b+c)^2=3(b-c)^2>0 \quad\Rightarrow\quad 2a>b+c.

Теперь

OIr=a(b+ca)23=2abc23=ρ.OI-r=\frac{a-(b+c-a)}{2\sqrt3}=\frac{2a-b-c}{2\sqrt3}=\rho.

Кроме того,

IIa=AIaAI=2(rar)=2a3,II_a=AI_a-AI=2(r_a-r)=\frac{2a}{\sqrt3},

значит

OIa=IIaOI=2a3a23=3a23.OI_a=II_a-OI=\frac{2a}{\sqrt3}-\frac{a}{2\sqrt3} =\frac{3a}{2\sqrt3}.

Тогда

OIara=3a(a+b+c)23=2abc23=ρ.OI_a-r_a=\frac{3a-(a+b+c)}{2\sqrt3} =\frac{2a-b-c}{2\sqrt3}=\rho.

Следовательно, окружность σ\sigma с центром OO и радиусом ρ\rho касается и ω\omega, и ωa\omega_a.

Осталось доказать, что она проходит через XX и YY.


3. Опустим из OO перпендикуляр на BCBC

Пусть

H=AIBC,ONBC,NBC.H=AI\cap BC,\qquad ON\perp BC,\quad N\in BC.

Вычислим OHOH

По теореме о биссектрисе

BH=acb+c.BH=\frac{ac}{b+c}.

Длина биссектрисы:

AH=2bccos30b+c=3bcb+c.AH=\frac{2bc\cos30^\circ}{b+c}=\frac{\sqrt3\,bc}{b+c}.

А потому

IH=AHAI=3bcb+cb+ca3=a(b+ca)3(b+c).IH=AH-AI =\frac{\sqrt3\,bc}{b+c}-\frac{b+c-a}{\sqrt3} =\frac{a(b+c-a)}{\sqrt3(b+c)}.

Значит

OH=IHOI=a(b+ca)3(b+c)a23=a(2abc)23(b+c).OH=IH-OI =\frac{a(b+c-a)}{\sqrt3(b+c)}-\frac{a}{2\sqrt3} =\frac{a(2a-b-c)}{2\sqrt3(b+c)}.

4. Вычислим ONON и BNBN

Обозначим

φ=BHA.\varphi=\angle BHA.

В треугольнике ABHABH по теореме синусов:

ABsinφ=BHsin30,\frac{AB}{\sin\varphi}=\frac{BH}{\sin30^\circ},

то есть

sinφ=ABsin30BH=c/2ac/(b+c)=b+c2a.\sin\varphi=\frac{AB\cdot \sin30^\circ}{BH} =\frac{c/2}{ac/(b+c)}=\frac{b+c}{2a}.

Тогда

cosφ=1sin2φ=1(b+c)24a2=3(bc)2a,\cos\varphi =\sqrt{1-\sin^2\varphi} =\sqrt{1-\frac{(b+c)^2}{4a^2}} =\frac{\sqrt3(b-c)}{2a},

поскольку b>cb>c.

Из прямоугольного треугольника OHNOHN:

ON=OHsinφ=a(2abc)23(b+c)b+c2a=2abc43=ρ2.ON=OH\sin\varphi =\frac{a(2a-b-c)}{2\sqrt3(b+c)}\cdot \frac{b+c}{2a} =\frac{2a-b-c}{4\sqrt3} =\frac{\rho}{2}.

И

HN=OHcosφ=a(2abc)23(b+c)3(bc)2a=(2abc)(bc)4(b+c).HN=OH\cos\varphi =\frac{a(2a-b-c)}{2\sqrt3(b+c)}\cdot \frac{\sqrt3(b-c)}{2a} =\frac{(2a-b-c)(b-c)}{4(b+c)}.

Поэтому

BN=BH+HN=acb+c+(2abc)(bc)4(b+c)=2a+cb4.BN=BH+HN =\frac{ac}{b+c}+\frac{(2a-b-c)(b-c)}{4(b+c)} =\frac{2a+c-b}{4}.

5. Точка NN — середина XYXY

Так как

BX=c2,BY=BCCY=ab2,BX=\frac c2,\qquad BY=BC-CY=a-\frac b2,

получаем

NX=BNBX=2a+cb4c2=2abc4,NX=BN-BX =\frac{2a+c-b}{4}-\frac c2 =\frac{2a-b-c}{4}, NY=BYBN=(ab2)2a+cb4=2abc4.NY=BY-BN =\left(a-\frac b2\right)-\frac{2a+c-b}{4} =\frac{2a-b-c}{4}.

Значит,

NX=NY,NX=NY,

то есть NN — середина XYXY.

Кроме того,

NX=2abc4=3ρ2.NX=\frac{2a-b-c}{4}=\frac{\sqrt3\,\rho}{2}.

Теперь в прямоугольном треугольнике ONXONX:

OX2=ON2+NX2=(ρ2)2+(3ρ2)2=ρ2.OX^2=ON^2+NX^2 =\left(\frac{\rho}{2}\right)^2+\left(\frac{\sqrt3\,\rho}{2}\right)^2 =\rho^2.

Следовательно,

OX=ρ.OX=\rho.

Точно так же

OY=ρ.OY=\rho.

Итак, точки XX и YY лежат на окружности σ\sigma.


Итог

Построенная окружность σ\sigma

  • касается вписанной окружности ω\omega,
  • касается AA-вневписанной окружности ωa\omega_a,
  • проходит через точки XX и YY.

Что и требовалось доказать.


Если хочешь, я могу ещё написать более короткое “олимпиадное” решение на 10–12 строк без промежуточных вычислений.

このQ&Aを共有