Problem

A convex quadrilateral ABCD is given.
A
1
,
B
1
,
C
1
and
D
1
are the orthocenters of triangles BCD, CDA, DAB and ABC respectively.
Prove that in the quadrilaterals ABCD and
A
1
B
1
C
1
D
1
, the corresponding diagonals share the intersection points in the same ratio.
◼
  • Link to the problem from Sharygin 2006
  • Geometric Scene Construction

    We can first generate a fixed quadrilateral ABCD by giving the coordinate of each vertex explicitly. This is to prevent configurations that associated with orthocenters really far away from ABCD.
    In[]:=
    abcd={a{0,0},b{3.7,0},c{2.1`,2.35`},d{0.25`,1.9`}};
    Use TriangleCenter to generate a list of orthocenters for every 3 vertices.
    In[]:=
    a1b1c1d1=Thread[{a1,b1,c1,d1}(​​TriangleCenter[#,"Orthocenter"]&/@{{b,c,d},{a,c,d},{b,d,a},{a,b,c}}​​)]/.abcd;
    Now we can join the known vertices and two unknown points of intersection, put them into the GeometricScene function. This function serves as convenient solver for us to find the exact location of P and
    P
    1
    .
    In[]:=
    gc=With[{points=Join[abcd,a1b1c1d1,{p,p1}]},​​GeometricScene[points,{​​Polygon[{a1,b1,c1,d1}],​​Polygon[{a,b,c,d}],​​Style[Line[{b,p,d}],Dashed],​​Style[Line[{a,p,c}],Dashed],​​Style[Line[{a1,p1,c1}],Dashed],​​Style[Line[{b1,p1,d1}],Dashed]​​}]//RandomInstance]
    Out[]=
    I have a simple animation about how are the points changes with moving C and D.
    Out[]=
    The statement that we are going to prove is
    ◼
  • In polygon ABCD, point P divides segment AC into two parts. Their length ratio is
  • In[]:=
    EuclideanDistance[a,p]
    EuclideanDistance[p,c]
    /.gc["Points"]
    Out[]=
    1.38727
    ◼
  • In polygon ABCD, point P divides segment BD into two parts. Their length ratio is
  • In[]:=
    EuclideanDistance[b,p]
    EuclideanDistance[p,d]
    /.gc["Points"]
    Out[]=
    2.55547
    ◼
  • In polygon
    A
    1
    B
    1
    C
    1
    D
    1
    , point
    P
    1
    divides segment
    A
    1
    C
    1
    into two parts. Their length ratio is
  • In[]:=
    EuclideanDistance[a1,p1]
    EuclideanDistance[p1,c1]
    /.gc["Points"]
    Out[]=
    1.38727
    ◼
  • In polygon
    A
    1
    B
    1
    C
    1
    D
    1
    , point
    P
    1
    divides segment
    B
    1
    D
    1
    into two parts. Their length ratio is
  • In[]:=
    EuclideanDistance[b1,p1]
    EuclideanDistance[p1,d1]
    /.gc["Points"]
    Out[]=
    2.55547
    The simulated result confirms that
    AP
    PC
    =
    A
    1
    P
    1
    P
    1
    C
    1
    and
    BP
    PD
    =
    B
    1
    P
    1
    P
    1
    D
    1
    .

    Proof with some algebra

    This problem is closely related to this SE question. After readI feel it is very tricky to come up with a pure synthetic argument to just use auxiliary lines. However, if we choose the coordinate of the problem in a smart way, the algebraic computation is rather trivial in Wolfram Language. WLOG, we can fix point A and B first, then move around C and D to cover all possible configurations of quadrilateral ABCD or similar ones.
    In[]:=
    abcd={a{0,0},b{1,0},c{cx,cy},d{dx,dy}};
    Just like the simulation above, we find the quadrilateral of orthocenters with the same fashion. It is really nice that TriangleCenter also handles symbolic coordinates.
    In[]:=
    a1b1c1d1=Thread[{a1,b1,c1,d1}(​​TriangleCenter[#,"Orthocenter"]&/@{{b,c,d},{a,c,d},{b,d,a},{a,b,c}}​​)]/.abcd;
    Here we reuse the handy function from this post
    In[]:=
    segmentIntersection[p1_List,p2_List,p3_List,p4_List]:=Block[{u,v},Module[{sol},sol=Solve[u*(p2-p1)+p1v*(p4-p3)+p3,{u,v}];​​{u,v,u*(p2-p1)+p1}/.sol〚1〛]]
    Use the above function on polygon ABCD. Note that the intersecting segments that we are interested in are AC and BD
    In[]:=
    sol1=Simplify[segmentIntersection[a,c,b,d]/.abcd]
    Out[]=
    
    dy
    cy-cydx+cxdy
    ,
    cy
    cy-cydx+cxdy
    ,
    cxdy
    cy-cydx+cxdy
    ,
    cydy
    cy-cydx+cxdy
    
    On polygon
    A
    1
    B
    1
    C
    1
    D
    1
    In[]:=
    sol2=Simplify[segmentIntersection[a1,c1,b1,d1]/.a1b1c1d1]
    Out[]=
    
    dy
    cy-cydx+cxdy
    ,
    cy
    cy-cydx+cxdy
    ,
    cydy(-cy+dy)+cx(cy-cydx+dxdy)
    cy-cydx+cxdy
    ,
    2
    cx
    (-1+dx)-cydxdy+cx(1-
    2
    dx
    +cydy)
    cy-cydx+cxdy
    
    Recall that in both sol1 and sol2, the first two items are exactly the length ratio in which we are interested.
    ◼
  • u=
    AP
    AC
    =
    dy
    cy-cydx+cxdy
    =
    A
    1
    P
    1
    A
    1
    C
    1
  • ◼
  • v=
    CP
    CD
    =
    cy
    cy-cydx+cxdy
    =
    C
    1
    P
    1
    C
    1
    D
    1
  • In[]:=
    sol1〚;;2〛===sol2〚;;2〛
    Out[]=
    True
    Thus last result concludes our proof. Additionally, let’s take a look denominator.It is indeed associated with the ratios of sub-areas in the quadrilateral ABCD. We can compute the area of triangle ACD with cross product
    In[]:=
    Cross[{cx,cy,0},{dx,dy,0}]
    2
    Out[]=
    0,0,
    1
    2
    (-cydx+cxdy)
    If we come back to the SE question we have mentioned, the equal area statement is also verified easily:

    Review

    ◼
  • Choose proper coordinates for the base quadrilateral for compact visualization
  • ◼
  • Use Triangle center to generate numerical and symbolic orthocenters
  • ◼
  • Use linear function solver to quickly pin the location of intersection and the ratio of segment division
  • ◼
  • Use build in Area function on simple polygons to find equal areas