GeometricScene in Olympiad Geometry
Author
Shenghui Yang
Title
GeometricScene in Olympiad Geometry
Description
My hobby in Olympiad Euclidean geometry from high school and the Wolfram Language merge perfectly together after Version 12. I have gone through many competition-level problems on AOPS, Sharygin and Titu's book. I have curated a handful of nice solutions using GeometricScene and complex number conversion, both animated and combined, many of which have been published on Wolfram Community and the Chinese Mathematica user group. I am going to talk about how to use Wolfram Language functions to help us understand the idea behind the construction proof. Also, good visualization is critical to help focus on the important part in a complicated GeometricScene. I will show the proper use of HatchFilling to highlight the featured area to outline pivot steps like congruence, cyclic quadrilateral for angle chasing and so on.
Category
Essays, Posts & Presentations
Keywords
URL
http://www.notebookarchive.org/2020-10-4nd733c/
DOI
https://notebookarchive.org/2020-10-4nd733c
Date Added
2020-10-10
Date Last Modified
2020-10-10
File Size
Supplements
Rights
Redistribution rights reserved



GeometricScene in Olympiad Geometry
GeometricScene in Olympiad Geometry
Shenghui Yang, Wolfram Alpha
AMC 2019
AMC 2019
gs=GeometricScene[{a{0,0},b{9,0},c,d,x,y},{EuclideanDistance[a,c]7,dMidpoint[{b,c}],x∈Line[{a,b}],y∈Line[{a,c}],GeometricAssertion[{Line[{a,b}],Line[{d,x}]},"Perpendicular"],GeometricAssertion[{Line[{a,c}],Line[{d,y}]},"Perpendicular"],EuclideanDistance[a,x]6}]//RandomInstance
Out[]=
In[]:=
Rationalize[EuclideanDistance[a,y]/.gs["Points"],0.01]
Out[]=
38
7
Zhautykov 2010
Zhautykov 2010
In[]:=
gs=GeometricScene[{a{0,0},b,c{2,0},d,m},{Triangle[{a,b,c}],mMidpoint[{a,c}],Line[{b,d,c}],PlanarAngle[{b,m,a}]PlanarAngle[{d,m,c}],EuclideanDistance[c,d]+EuclideanDistance[d,m]==EuclideanDistance[b,m]}]//RandomInstance
Out[]=
Add auxiliary lines in the scence
In[]:=
gs=GeometricScene[{a{0,0},b,c{2,0},d,e,m},{Triangle[{a,b,c}],Line[{b,m}],Style[Line[{m,d,e}],Transparent],Style[Triangle[{m,c,e}],Transparent,EdgeForm[Dashed]],mMidpoint[{a,c}],Line[{b,d,c}],PlanarAngle[{b,m,a}]PlanarAngle[{d,m,c}],EuclideanDistance[c,d]+EuclideanDistance[d,m]==EuclideanDistance[b,m]==EuclideanDistance[e,m]}]//RandomInstance[#,RandomSeeding3]&
Out[]=
In[]:=
gs//FindGeometricConjectures
Out[]=
GeometricAssertion[{Triangle[{a,b,m}],Triangle[{c,e,m}]},Congruent] |
Use Hatching to highlight the isosceles triangle of interest.
In[]:=
Show[Graphics[{HatchFilling[],Triangle[{c,d,e}]}]/.gs["Points"],gs["Graphics"]]
Out[]=
The conclusion is proved by observing angle ABM = MEC = ECM.
Italian MO 2001
Italian MO 2001
The following construction uses the fact that the sum of interior angles in a convex hexagon is 720 degrees.
In[]:=
WolframAlpha["hexagon",IncludePods"Properties",AppearanceElements{"Pods"},TimeConstraint{20,Automatic,Automatic,Automatic}]
Out[]=
|
GeometricScence implicitly solves the problem with the given constraints.
In[]:=
gs=GeometricScene[{a{0,0},b{5,0},c,d,e,f},{PlanarAngle[{a,b,c}]PlanarAngle[{b,c,d}]==PlanarAngle[{c,d,e}]2π/3,PlanarAngle[{d,e,f}]==PlanarAngle[{e,f,a}]PlanarAngle[{f,a,b}]2π/3,EuclideanDistance[b,c]3,EuclideanDistance[c,d]6,EuclideanDistance[d,e]7,GeometricAssertion[{a,b,c,d,e,f},"Counterclockwise"]}]//RandomInstance
Out[]=
intersection segmentIntersection[p1,p2,p3,p4]
In[]:=
{ptG,ptH,ptI}=({segmentIntersection[e,f,b,a],segmentIntersection[a,b,d,c],segmentIntersection[c,d,f,e]}/.gs["Points"])[[All,3]];
Generate an Association for location extraction and labeling of points.
In[]:=
pts=pts~Join~AssociationThread[{g,h,i}{ptG,ptH,ptI}];
Very clear visualization cannot be done without proper HatchFilling.
In[]:=
Graphics[{{Transparent,EdgeForm[Dashed],Triangle[pts/@{g,h,i}]},{HatchFilling[],EdgeForm[{Thick,Cyan}],Polygon[pts/@{a,b,c,d,e,f}]},label/@Keys[pts]}]
Out[]=
By assuming and , we can find the solution by solving the following set of equations:
(x=EF)
(y=FA)
In[]:=
Solve[{x+y+7==y+5+3(*GI=GH*),x+y+7==3+6+7(*GI=HI*)},{x,y}]
Out[]=
{{x1,y8}}
Excenters and Orthic Triangles
Excenters and Orthic Triangles
Once the three vertices of a triangle is given, so are the three excenters. The orthocenter of the gray triangle coincides with the concurrency of the blue solid lines.
In[]:=
tri=<|"a"->{0,0},"b"->{4,0},"c"->{3.5,3.1}|>;With[{vertices=Values[tri]},ia=TriangleCenter[vertices,{"Excenter",tri["a"]}];ib=TriangleCenter[vertices,{"Excenter",tri["b"]}];ic=TriangleCenter[vertices,{"Excenter",tri["c"]}];oc=TriangleCenter[{ia,ib,ic},"Orthocenter"];];Graphics[{{Opacity[0.2],Triangle[Values[tri]]},{Blue,PointSize[Large],Point[{ia,ib,ic,oc}]},{Dashed,Line[{{ia,ib},{ib,ic},{ic,ia}}]},{Blue,Line[{{ia,tri["a"]},{ib,tri["b"]},{ic,tri["c"]}}]}}]
Out[]=
Wrap the above code within Manipulate and add customized style
In[]:=
Manipulate[{aa,bb,cc}={p1,p2,p3};Graphics[{{Dashed,Opacity[0.4],InfiniteLine[{p1,p2}],InfiniteLine[{p2,p3}],InfiniteLine[{p3,p1}]},{Opacity[0.3],TriangleConstruct[{p1,p2,p3},{"Excircle",p1}],TriangleConstruct[{p1,p2,p3},{"Excircle",p2}],TriangleConstruct[{p1,p2,p3},{"Excircle",p3}]},{Opacity[0.9],Text[Style["ia",Bold,20],ia=TriangleConstruct[{p1,p2,p3},{"Excenter",p1}]〚1〛],Text[Style["ib",Bold,20],ib=TriangleConstruct[{p1,p2,p3},{"Excenter",p2}]〚1〛],Text[Style["ic",Bold,20],ic=TriangleConstruct[{p1,p2,p3},{"Excenter",p3}]〚1〛]},{Dashed,Opacity[0.4],InfiniteLine[{ia,ib}],InfiniteLine[{ib,ic}],InfiniteLine[{ic,ia}]},{Dashed,Opacity[0.2],InfiniteLine[{ia,p1}],InfiniteLine[{ib,p2}],InfiniteLine[{ic,p3}]}},PlotRange2],{{p1,{-0.4,-0.5}},Locator,AppearanceStyle["A",Bold,20]},{{p2,{1,0}},Locator,AppearanceStyle["B",Bold,20]},{{p3,{0,1}},Locator,AppearanceStyle["C",Bold,20]},SaveDefinitionsTrue]
| ||
|
From Sharygin 2016
From Sharygin 2016
Normally, I sketch a triangle on paper and locate the intersection of the aforementioned segments, the point does not bisect a median. Therefore this triangle must be very special. Question like this are very hard to come by with canvas type software because I have no idea how to align the points to meet the requirement at the same time. Meanwhile, it is particularly suitable for syntactic geometry construction like solving implicit equations:
In[]:=
gs4=GeometricScene[{"A","B"{2,0},"C"{0,0},"D","M","N"},{"D"TriangleCenter[{"A","B","C"},{"Foot","A"}],"M"Midpoint[{"A","C"}],"N"Midpoint[{"B","M"}],Line[{"A","N","D"}]}];
I immediately created the precise configuration of the given problem
In[]:=
instance4=RandomInstance[gs4]
Out[]=
I notice it might be easier to approach the solution by some algebra or Cartesian coordinate method. Let A = {xa, ya}, B = {xb ,0 } and C = {0,0} at origin. The problem mentions midpoint twice (1 - M bisects AC and 2 - N bisects BM). This implies that I can use the mid point formula twice, which is adding two coordinates of end points of a segment and halves the sum. Also segment AND is an altitude, this means the three point shares the same X coordinate. Let me transform the statement into Wolfram language code
In[]:=
Solve12+{xb,0}[[1]]xa,xa
{xa,ya}+{0,0}
2
Out[]=
xa
2xb
3
Aha! The result tells that for any triangle with foot D at CD : CB = 2 : 3 works! A more general observation is that the diagram follows the Menelaus’ Theorem
In[]:=
ResourceData["Demonstrations Project: Menelaus' Theorem"]
Out[]=
| ||||||||||||||||||||||||||||||||||||||||||||
|
In particular we need the multiplication identity for the following undirected segments in our case:
◼
CA x MN x BD = AM x NB x DC with CA = 2 AM and MN = NB
Cancel the terms in the equation I have the same result as the Cartesian method. Based on this result, l can use the theorem again on the following segments
◼
CB x ND x AM = BD x DN x MC with AM = MC and CB = 3 x BD
I have DN : NA = 1 : 3. The next step is to directly compute three medians and verify there Pythagorean relations. I use TriangleConstruct to find the coordinates for these segments
In[]:=
{TriangleConstruct[{"A","M","B"},{"Median","A"}],TriangleConstruct[{"A","M","B"},{"Median","M"}],TriangleConstruct[{"A","M","B"},{"Median","B"}]}/.instance4["Points"]
Out[]=
{Line[{{1.33333,1.69985},{1.33333,0.424963}}],Line[{{0.666667,0.849926},{1.66667,0.849926}}],Line[{{2.,0.},{1.,1.27489}}]}
I compute the squared length of each segment and I notice the first two smaller number adds up to the third item in the list. This numerically checks the Pythagorean identity holds here.
In[]:=
SquaredEuclideanDistance@@@(%/.LineIdentity)
Out[]=
{1.62534,1.,2.62534}
To proof with minimum words, I have a very nice list of visualization here by adding some Graphics layer on top of the current GeometricScene. Let E bisects AM and F bisects AB. What I am going to show is that
◼
EKB is a right triangle (hatch filled triangle in the first diagram)
◼
MF = KB and AN = EK (using two hatch filled parallelograms below respectively)
Both results are based on Triangle Proportionality Theorem, i.e. if a line parallel to one side of a triangle intersects the other two sides, then it divides those sides proportionally. And vice versa.
In[]:=
Column[Show[instance4["Graphics"],Graphics[{{Opacity[0.6],Dashed,Thick,Red,Line[{"B",Midpoint[{"A","M"}]}]},{Opacity[0.6],Dashed,Thick,Blue,Line[{Midpoint[{"B","C"}],Midpoint[{"A","M"}]}]},{Opacity[0.7],HatchFilling[],#},labelfunc["E",Midpoint[{"A","M"}]],labelfunc["F",Midpoint[{"A","B"}]],labelfunc["K",Midpoint[{"C","B"}]]}/.instance4["Points"]],ImageSizeMedium]&/@{Polygon[{"B",Midpoint[{"B","C"}],Midpoint[{"A","M"}]}],Polygon[{"M",Midpoint[{"B","C"}],"B",Midpoint[{"A","B"}]}],Polygon[{"A","N",Midpoint[{"B","C"}],Midpoint[{"A","M"}]}]}]
Out[]=
I can prove the first argument quickly some algebra:
M is midpoint of AC and E is mid point of AM. So AE is 1/4 of AC.
K is mid point of BC and CD : BC = 2 : 3. Therefore DK is 1/4 of BC by following calculation
M is midpoint of AC and E is mid point of AM. So AE is 1/4 of AC.
K is mid point of BC and CD : BC = 2 : 3. Therefore DK is 1/4 of BC by following calculation
In[]:=
(2/3*bc-1/2*bc)
2/3*bc
Out[]=
1
4
Therefore E and K divides AC and CD proportionally, which implies AD is parallel to EK. Because AD is altitude, EK is perpendicular to DC as well (EKD is right triangle). I also have DN : NA = 1 : 3 from above, which is same thing as DN = 1/4 DA. Therefore N and K divides AD and DC proportionally, which implies NK is parallel to AC (or AE).
Together we have EK = AN because ANKE is a parallelogram. Similar argument is used to transit MF onto KD. Eventually I can conclude that segments MF, AN and BE are sides of a right triangle congruent to triangle EKB.
Together we have EK = AN because ANKE is a parallelogram. Similar argument is used to transit MF onto KD. Eventually I can conclude that segments MF, AN and BE are sides of a right triangle congruent to triangle EKB.


Cite this as: Shenghui Yang, "GeometricScene in Olympiad Geometry" from the Notebook Archive (2020), https://notebookarchive.org/2020-10-4nd733c

Download

