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)
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",
)