Geometric Construction of Lemoine Point and Lemoine Hyperbola in Triangle
Loading the math board and drawing, please wait…
In collections
geometriadinamica.es
This GeoGebra example demonstrates the construction of the Lemoine point (also known as the symmedian point or Brocard point) within a triangle and its associated geometric properties. The core mathematical concepts include triangle medians, angle bisectors, symmedians, and the relationship between the Lemoine point and the Lemoine hyperbola. Construction details: Using Midpoint command to create medians, AngularBisector for angle bisectors, Mirror to construct symmedians, combined with Polygon, Circle, Hyperbola and other GeoGebra commands. The construction showcases how the Lemoine point serves as the triangle's center of gravity for symmedians and its connection to the Kiepert hyperbola. Suitable for advanced high school and undergraduate geometry courses, serving as an excellent teaching example for understanding special triangle points and conic sections.
GeoGebra Commands & Parameters
Midpoint(A, C) → M3Angle(C, B, A) → γAngle(A, C, B) → βAngle(B, A, C) → αMidpoint(C, B) → M1Line(A, M1) → mediana1AngularBisector(C, A, B) → bisectrizV1Mirror(mediana1, bisectrizV1) → simediana1AngularBisector(A, C, B) → bisectrizV2Midpoint(A, B) → M2If(δ ≟ α, M1, If[δ ≟ β, M2, M3]) → MLine(C, M2) → mediana2Mirror(mediana2, bisectrizV2) → simediana2Intersect(simediana1, simediana2) → LemoineLine(M, Lemoine) → ePolygon(A, C, B) → isleta, v3, v1, v2LineBisector(v1) → mediatriz2LineBisector(v2) → mediatriz1Intersect(mediatriz2, mediatriz1) → OOrthogonalLine(C, bisectrizV2) → iIntersect(bisectrizV1, i) → I1Intersect(bisectrizV1, bisectrizV2) → IOrthogonalLine(A, bisectrizV1) → jIntersect(i, j) → I3Conic(Lemoine, I, I3, I1, O) → h1FirstAxisLength(h1) → semiejeFocus(h1) → Foco2, Foco1Hyperbola(Foco1, Foco2, semieje) → hAsymptote(h) → asintota2, asintota1Segment(O, B) → ROrthogonalLine(I, v1) → ortoIIntersect(v1, ortoI) → IbaseSegment(I, Ibase) → rCenter(h1) → X110OrthogonalLine(G, v3) → g3Intersect(v3, g3) → G3Vector(G, G3) → u3Ray(P, R312) → s312Intersect(v3, s312) → S312Circle(P, d) → circuloPIntersect(circuloP, v3, 1) → P31Intersect(circuloP, v3, 2) → P32Midpoint(P31, P32) → PM3Ray(P, PM3) → sM3Intersect(circuloP, sM3) → PCM3,CircumcircleSector(P31, PCM3, P32) → sector2cEPolygon(P, P31, P32) → tri2c, z2c2, z2c3, z2c1Area(A, C, B) → areaiIntersect(circuloP, v1, 1) → P11If(P11 ≟ P11, true, false) → p11Intersect(circuloP, v1, 2) → P12If(P12 ≟ P12, true, false) → p12Midpoint(P11, P12) → PM1Ray(P, PM1) → sM1Intersect(circuloP, sM1) → PCM1,CircumcircleSector(P11, PCM1, P12) → sector2aEPolygon(P, P11, P12) → tri2a, z2a2, z2a3, z2a1OrthogonalLine(G, v1) → g1Intersect(v1, g1) → G1Vector(G, G1) → u1Ray(P, R112) → s112Intersect(circuloP, s112) → P112, Cir1CircumcircleSector(P11, P112, P12) → sector2aIntersect(v1, s112) → S112If(S112 ≟ S112, sector2a - tri2a, sector2a + tri2a) → area2aIntersect(circuloP, v2, 1) → P22If(P22 ≟ P22, true, false) → p22Intersect(circuloP, v2, 2) → P21If(P21 ≟ P21, true, false) → p21Midpoint(P21, P22) → PM2Ray(P, PM2) → sM2Intersect(circuloP, sM2) → PCM2, Cir2CircumcircleSector(P21, PCM2, P22) → sector2bEPolygon(P, P21, P22) → tri2b, z2b2, z2b3, z2b1OrthogonalLine(G, v2) → g2Intersect(v2, g2) → G2Vector(G, G2) → u2Ray(P, R212) → s212Intersect(circuloP, s212) → P212, Cir3CircumcircleSector(P21, P212, P22) → sector2bIntersect(v2, s212) → S212If(S212 ≟ S212, sector2b - tri2b, sector2b + tri2b) → area2bIf(P32 ≟ P32, true, false) → p32If(P31 ≟ P31, true, false) → p31If(p11 ∧ p12 ∧ p21 ∧ p22 ∧ p31 ∧ p32, true, false) → pos2EIntersect(circuloP, s312) → P312, Cir4CircumcircleSector(P31, P312, P32) → sector2cIf(S312 ≟ S312, sector2c - tri2c, sector2c + tri2c) → area2cIf(pos2E, aread - area2aE - area2bE - area2cE, area2) → area2ESegment(P, A) → dV1Segment(P, C) → dV2Ray(P, M3) → fuera3Segment(P, B) → dV3If(dV1 ≤ d ∧ dV2 ≤ d ∧ dV3 ≤ d, true, false) → pos5If(pos5, areai, 0) → area5If(area5 < areai, area5, areai) → area5TIntersect(v2, fuera3) → Corte32Intersect(v1, fuera3) → Corte31If(p12 ∧ (¬p11), P12, P11) → P1If(P1 ≟ P1, true, false) → p1If(Distance[P21, P1] > Distance[P22, P1], P22, P21) → P21'Polygon(P, P1, P21') → tri621, ztri621c, ztri621b, ztri621aIf(Distance[P21, P1] > Distance[P22, P1], P21, P22) → P22'If(p22 ∧ (¬p21), P22, P21) → P2Midpoint(P2, P1) → V3bRay(P, V3b) → sV3Intersect(circuloP, sV3, 1) → V3cCircumcircleSector(P2, V3c, P1) → sector1cPolygon(B, P1, P2) → tri1c, z1c2, z1c3, z1c1Polygon(P, P1, P2) → tri01c, z01c2, z01c3, z01c1If(Distance[V3b, B] < dV3 ∧ Distance[A, P] < d, aread - sector1c + tri1c + tri01c, tri1c + sector1c - tri01c) → area1cPolygon(C, A, P2, P1) → cuadri3, zcuadri3a, zcuadri3b, zcuadri3c, zcuadri3dIf(Distance[P11, P2] > Distance[P12, P2], P12, P11) → P11'Polygon(P, P2, P11') → tri611, ztri611b, ztri611a, ztri611cIf(Distance[P11, P2] > Distance[P12, P2], P11, P12) → P12'If(P2 ≟ P2, true, false) → p2If(Distance[P31, P2] > Distance[P32, P2], P32, P31) → P31'Polygon(P, P2, P31') → tri632, ztri632a, ztri632c, ztri632bIf(Distance[P31, P2] > Distance[P32, P2], P31, P32) → P32'Polygon(B, P1, P32', P31', P2) → penta3, zpenta3e, zpenta3d, zpenta3c, zpenta3b, zpenta3aPolygon(P, P1, P32') → tri631, ztri631b, ztri631c, ztri631aIf(p31 ∧ p32 ∧ p1 ∧ p2 ∧ ((¬p11) ∨ (¬p12)) ∧ ((¬p21) ∨ (¬p22)), true, false) → pos6cIf(p11 ∧ p12 ∧ p21 ∧ p22 ∨ p11 ∧ p12 ∧ p31 ∧ p32 ∨ p21 ∧ p22 ∧ p31 ∧ p32, true, false) → pos2If(p32 ∧ (¬p31), P32, P31) → P3Polygon(C, P1, P21', P22', P3) → penta2, zpenta2c, zpenta2b, zpenta2a, zpenta2e, zpenta2dPolygon(P, P3, P22') → tri622, ztri622c, ztri622a, ztri622bMidpoint(P1, P3) → V2bRay(P, V2b) → sV2Intersect(circuloP, sV2, 1) → V2cCircumcircleSector(P1, V2c, P3) → sector1bPolygon(C, P1, P3) → tri1b, z1b2, z1b3, z1b1Polygon(P, P1, P3) → tri01b, z01b2, z01b3, z01b1If(Distance[V2b, C] < dV2 ∧ Distance[A, P] < d, aread - sector1b + tri1b + tri01b, tri1b + sector1b - tri01b) → area1bPolygon(A, B, P1, P3) → cuadri2, zcuadri2a, zcuadri2b, zcuadri2c, zcuadri2dPolygon(A, P2, P11', P12', P3) → penta1, zpenta1a, zpenta1b, zpenta1c, zpenta1d, zpenta1ePolygon(P, P3, P12') → tri612, ztri612c, ztri612b, ztri612aMidpoint(P2, P3) → V1bRay(P, V1b) → sV1Intersect(circuloP, sV1, 1) → V1cCircumcircleSector(P2, V1c, P3) → sector1aPolygon(P, P2, P3) → tri01a, z01a2, z01a3, z01a1Polygon(A, P2, P3) → tri1a, z1a2, tri1a3, z1a1If(Distance[V1b, A] < dV1 ∧ Distance[B, P] < d, aread - sector1a + tri1a + tri01a, tri1a + sector1a - tri01a) → area1aIf(area1a ≟ area1a, area1a, If[area1b ≟ area1b, area1b, area1c]) → area1If(area1 < areai, area1, areai) → area1TPolygon(C, B, P2, P3) → cuadri1, zcuadri1a, zcuadri1b, zcuadri1c, zcuadri1dIf(area4 < areai, area4, areai) → area4TIf(P3 ≟ P3, true, false) → p3If(p21 ∧ p22 ∧ p1 ∧ p3 ∧ ((¬p11) ∨ (¬p12)) ∧ ((¬p31) ∨ (¬p32)), true, false) → pos6bIf((¬p3) ∧ p1 ∧ ((¬p11) ∨ (¬p12)) ∧ p2 ∧ ((¬p21) ∨ (¬p22)), true, false) → pos1cIf((¬p2) ∧ p1 ∧ ((¬p11) ∨ (¬p12)) ∧ p3 ∧ ((¬p31) ∨ (¬p32)), true, false) → pos1bIf((¬p1) ∧ p2 ∧ ((¬p21) ∨ (¬p22)) ∧ p3 ∧ ((¬p31) ∨ (¬p32)), true, false) → pos1aIf(pos1a ∨ pos1b ∨ pos1c, true, false) → pos1If(pos1 ∧ dV2 ≤ d ∧ dV3 ≤ d, true, false) → pos4cIf(pos1 ∧ dV1 ≤ d ∧ dV3 ≤ d, true, false) → pos4bIf(pos1 ∧ dV1 ≤ d ∧ dV2 ≤ d, true, false) → pos4aIf(pos4a ∨ pos4b ∨ pos4c, true, false) → pos4If(p1 ∧ (¬p2) ∧ (¬p3) ∨ (¬p1) ∧ p2 ∧ (¬p3) ∨ (¬p1) ∧ (¬p2) ∧ p3, true, false) → pos3If(p11 ∧ p12 ∧ p2 ∧ p3 ∧ ((¬p21) ∨ (¬p22)) ∧ ((¬p31) ∨ (¬p32)), true, false) → pos6aIf(pos6a ∨ pos6b ∨ pos6c, true, false) → pos6CircumcircleSector(P2, P312, P1) → sector6cIf(pos6c, penta3 + sector6c - sector2c - tri631 - tri632, 0) → area6cCircumcircleSector(P1, P212, P3) → sector6bIf(pos6b, penta2 + sector6b - sector2b - tri621 - tri622, 0) → area6bCircumcircleSector(P2, P112, P3) → sector6aIf(pos6a, penta1 + sector6a - sector2a - tri611 - tri612, 0) → area6aIf(area2E < areai, area2E, areai) → area2TIf(area6 < areai, area6, areai) → area6TRay(P, M2) → fuera2Intersect(v1, fuera2) → Corte21Intersect(v3, fuera2) → Corte23Ray(P, M1) → fuera1Intersect(v3, fuera1) → Corte13Intersect(v2, fuera1) → Corte12Line(B, Lemoine) → simediana3If(sector2c > aread / 2, sector2c + tri2c, sector2c) → sector2CIf(areaT > 0 ∨ Corte12 ≟ Corte12 ∨ Corte13 ≟ Corte13 ∨ Corte21 ≟ Corte21 ∨ Corte23 ≟ Corte23 ∨ Corte31 ≟ Corte31 ∨ Corte32 ≟ Corte32, areaT, aread) → areaAngle(isleta) → ε, ζ, ηLine(B, M3) → mediana3Intersect(bisectrizV2, j) → I2Circle(O, R) → circunscritaLine(G, O) → eulerMirror(euler, v2) → eulerABMirror(euler, v1) → eulerBCIntersect(h1, e, 2) → HIntersect(h1, euler, 1) → JSegment(J, I) → aIntersect(euler, eulerBC) → EESegment(O, B) → bCircle(I, Ibase) → fLine(I, B) → cOrthogonalLine(B, c) → gPoint(asintota2) → DPoint(asintota1) → EAngle(D, X110, E) → θMirror(euler, v3) → eulerAC
AI Drawing Prompt Reference
Inside a given triangle, construct the key triangle lines first: draw the relevant angle bisectors and the medians from each vertex to the midpoint of the opposite side. Using the mirror relation with those bisectors, form the two associated symmedians, and mark their intersection as the Lemoine point. Then determine several auxiliary intersection points coming from the bisectors together with orthogonal lines, and use them to define an appropriate conic whose center and focus pair can be identified through the construction. Draw the resulting hyperbola determined by the two foci and the computed semiaxis, including its two asymptotes. Finally, add the associated segments and a circumcircle-derived sector to visually connect the Lemoine point with the hyperbola’s geometry.
The prompt above was compiled from the original drawing commands and is for reference only.