X179

1st AJIMA-MALFATTI POINT

The famous Malfatti Problem is to construct three circles O(A), O(B), O(C) inside ABC such that each is externally tangent to the other two, O(A) is tangent to lines AB and AC, O(B) is tangent to BC and BA, and O(C) is tangent to CA and CB. Let A' = O(B)∩O(C), B' = O(C)∩O(A), C' = O(A)∩O(B). The lines AA',BB',CC' concur in X179. Trilinears are found in Yff’s unpublished notes. See also the Yff-Malfatti Point, X400, having trilinears \(\csc^{4}(A/4)\) : \(\csc^{4}(B/4)\) : \(\csc^{4}(C/4)\), and the references for historical notes.
< 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) { 1, 1142 }: Central Line L(1, 1142) 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_1142 = 1st MALFATTI-RABINOWITZ POINT (0.5841, 0.2601) X_179 = 1st AJIMA-MALFATTI POINT (0.5808, 0.2529) A B C X1 X1142 X179 (a, b, c) = (5, 6, 7) | AB = 1

X179 (1st AJIMA-MALFATTI POINT) constructed on acute reference triangle \((a, b, c) = (5, 6, 7)\) with unit baseline AB = \(1\).

"""GEOMETOR construction model for X_179 = 1st AJIMA-MALFATTI POINT."""

        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,
            incenter_of,
            promote_point_to_top,
        )
        from geometor.etc.render import write_center_svg


        def construct_x_00179(
            model: Model, A: spg.Point, B: spg.Point, C: spg.Point
        ) -> spg.Point:
            """Construct X_179 = 1st AJIMA-MALFATTI POINT on reference triangle ABC."""
            X_179 = eval_trilinear_point(model, A, B, C, '(sec(A/4))**(4)', ID="X_179", classes=["selected", "target"])
            X_1 = incenter_of(model, A, B, C, ID="X_1", classes=["center", "incident"])
            X_1142 = eval_trilinear_point(model, A, B, C, '(1 - 2*(1 + cos(B/2))*(1 + cos(C/2))/(1 + cos(A/2)))', ID="X_1142", classes=["center", "incident"])
            central_line(model, X_1, X_1142, 1, 1142, incident=True)
            return promote_point_to_top(model, X_179)


        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_179 on the given reference triangle."""
            model = create_model('X_179 = 1st AJIMA-MALFATTI POINT')
            A, B, C = construct_baseline_triangle(model, *sides, show_guides=show_guides)
            construct_x_00179(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-00179.json"))
            write_center_svg(
                model_acute,
                here / "x-00179.svg",
                subtitle="(a, b, c) = (5, 6, 7) | AB = 1",
            )