X3649

KS(INTOUCH TRIANGLE)

Two proofs of Dao’s theorem about cyclic hexagons were published in 2014: Nikolaos Dergiades’s Dao’s Theorem on Six Circumcenters Associated with a Cyclic Hexagon and Telv Cohl’s A Purely Synthetic Proof of Dao’s Theorem on Six Circumcenters Associated with a Cyclic Hexagon. In the degenerate case that the hexagon is the intouch triangle A'B'C', the triangle of the circumcenters of AB'C', A'BC', A'B'C is perspective to A'B'C' with perspector X3649. (Dao Thanh Oai, Francisco Javier Garcia Capitan, ADGEOM #1718, September 16, 2014)
< A B C >: Reference Triangle △ABC [ A B ]: Sideline AB (Base c = 1) [ B C ]: Sideline BC (Side a) [ C A ]: Sideline CA (Side b) incircle: Incircle of △ABC { 10, 12 }: Central Line L(10, 12) { 7, 21 }: Central Line L(7, 21) { 1, 30 }: Central Line L(1, 30) { 11, 113 }: Central Line L(11, 113) { 57, 191 }: Central Line L(57, 191) { 145, 388 }: Central Line L(145, 388) A = Vertex A (0.0000, 0.0000) B = Vertex B (1.0000, 0.0000) C = Vertex C (0.6122, 0.5999) X_1 = INCENTER (0.5714, 0.2333) X_10 = SPIEKER CENTER (0.5204, 0.1833) X_12 = {X(1),X(5)}-HARMONIC CONJUGATE OF X(11) (0.5641, 0.2407) X_7 = GERGONNE POINT (0.5903, 0.2769) X_21 = SCHIFFLER POINT (0.5287, 0.1771) X_30 = EULER INFINITY POINT (0.7469, 0.7481) X_11 = FEUERBACH POINT (0.7347, 0.0667) X_113 = JERABEK ANTIPODE (0.4319, 0.4718) X_57 = ISOGONAL CONJUGATE OF X(9) (0.6138, 0.3110) X_191 = -CEVA CONJUGATE OF X(1) (0.4859, 0.1209) X_145 = ANTICOMPLEMENT OF NAGEL POINT (0.6735, 0.3333) X_388 = ∩X(7)X(8) (0.5790, 0.2635) X_3649 = KS(INTOUCH TRIANGLE) (0.5845, 0.2676) A B C X1 X10 X12 X7 X21 X30 X11 X113 X57 X191 X145 X388 X3649 (a, b, c) = (5, 6, 7) | AB = 1

X3649 (KS(INTOUCH TRIANGLE)) constructed on acute reference triangle \((a, b, c) = (5, 6, 7)\) with unit baseline AB = \(1\).

"""GEOMETOR construction model for X_3649 = KS(INTOUCH TRIANGLE)."""

        from __future__ import annotations

        from pathlib import Path

        import sympy.geometry as spg
        from geometor.model import Model

        from geometor.etc.ops import (
            central_line,
            construct_baseline_triangle,
            create_model,
            eval_trilinear_point,
            gergonne_point_of,
            incenter_of,
            promote_point_to_top,
            spieker_center_of,
        )
        from geometor.etc.render import write_center_svg


        def construct_x_03649(
            model: Model, A: spg.Point, B: spg.Point, C: spg.Point
        ) -> spg.Point:
            """Construct X_3649 = KS(INTOUCH TRIANGLE) on reference triangle ABC."""
            X_3649 = eval_trilinear_point(model, A, B, C, '(b*c*(b + c)*(2*a + b + c)*(a - b + c)*(a + b - c))', ID="X_3649", classes=["selected", "target"])
            X_10 = spieker_center_of(model, A, B, C, ID="X_10", classes=["center", "incident"])
            X_12 = eval_trilinear_point(model, A, B, C, '1 + cos(B - C)', ID="X_12", classes=["center", "incident"])
            central_line(model, X_10, X_12, 10, 12, incident=True)
            X_7 = gergonne_point_of(model, A, B, C, ID="X_7", classes=["center", "incident"])
            X_21 = eval_trilinear_point(model, A, B, C, '1/(cos(B) + cos(C))', ID="X_21", classes=["center", "incident"])
            central_line(model, X_7, X_21, 7, 21, incident=True)
            X_1 = incenter_of(model, A, B, C, ID="X_1", classes=["center", "incident"])
            X_30 = eval_trilinear_point(model, A, B, C, 'cos(A) - 2*cos(B)*cos(C)', ID="X_30", classes=["center", "incident"])
            central_line(model, X_1, X_30, 1, 30, incident=True)
            return promote_point_to_top(model, X_3649)


        def build_model(
            sides: tuple[float, float, float] = (5.0, 6.0, 7.0),
            show_guides: bool = False,
        ) -> Model:
            """Build a `geometor.model.Model` for X_3649 on the given reference triangle."""
            model = create_model('X_3649 = KS(INTOUCH TRIANGLE)')
            A, B, C = construct_baseline_triangle(model, *sides, show_guides=show_guides)
            construct_x_03649(model, A, B, C)
            return model


        if __name__ == "__main__":
            here = Path(__file__).resolve().parent
            model_acute = build_model((5.0, 6.0, 7.0))
            model_acute.save(str(here / "x-03649.json"))
            write_center_svg(
                model_acute,
                here / "x-03649.svg",
                subtitle="(a, b, c) = (5, 6, 7) | AB = 1",
            )