X3822¶
X2099com(3rd EULER TRIANGLE)
Suppose that ABC is an acute triangle. Let LA be the circle that is externally tangent to the nine-point circle and to the sidelines AB and AC. Define LB and LC cyclically. The three circles are here named the Odehnal tritangent circles. Their radical center is X3822. The center of the Apollonian circle of LA, LB, LC is X6167. (Boris Odehnal, “A Triad of Tritangent Circles, Journal for Geometry and Graphics 18 (2014) no. 1, 61-71)
X3822 (X2099com(3rd EULER TRIANGLE)) constructed on acute reference triangle \((a, b, c) = (5, 6, 7)\) with unit baseline AB = \(1\).¶
"""GEOMETOR construction model for X_3822 = X_2099com(3rd EULER 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,
centroid_of,
construct_baseline_triangle,
create_model,
eval_barycentric_point,
eval_trilinear_point,
promote_point_to_top,
spieker_center_of,
)
from geometor.etc.render import write_center_svg
def construct_x_03822(
model: Model, A: spg.Point, B: spg.Point, C: spg.Point
) -> spg.Point:
"""Construct X_3822 = X_2099com(3rd EULER TRIANGLE) on reference triangle ABC."""
X_3822 = eval_barycentric_point(model, A, B, C, '(b + c)*(b**(3) + c**(3) - a**(2)*b - a**(2)*c - b**(2)*c - b*c**(2) - a*b*c)', ID="X_3822", 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_2 = centroid_of(model, A, B, C, ID="X_2", classes=["center", "incident"])
X_36 = eval_trilinear_point(model, A, B, C, '1 - 2*cos(A)', ID="X_36", classes=["center", "incident"])
central_line(model, X_2, X_36, 2, 36, incident=True)
X_37 = eval_trilinear_point(model, A, B, C, 'b + c', ID="X_37", classes=["center", "incident"])
X_115 = eval_trilinear_point(model, A, B, C, 'b*c*(b**(2) - c**(2))**(2)', ID="X_115", classes=["center", "incident"])
central_line(model, X_37, X_115, 37, 115, incident=True)
return promote_point_to_top(model, X_3822)
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_3822 on the given reference triangle."""
model = create_model('X_3822 = X_2099com(3rd EULER TRIANGLE)')
A, B, C = construct_baseline_triangle(model, *sides, show_guides=show_guides)
construct_x_03822(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-03822.json"))
write_center_svg(
model_acute,
here / "x-03822.svg",
subtitle="(a, b, c) = (5, 6, 7) | AB = 1",
)