X574¶
HARMONIC OF X187
“Each one of the three circles of Apollonius of the reference triangle cuts the circumcircle in a second point. These three points form a triangle which is perspective with the base triangle through the symmedian point, the co-symmedian triangle. This triangle also possesses a Neuberg cubic, which has three points in common with the cubic of the first triangle in the circumcenter and the two isodynamic centers. Hence the remaining points of intersection must lie on a conic, which is necessarily a circle, since two of these six points are the circular points I and J.” Quoted from (T. W. Moore and J. H. Neelley). The center of the circle is X574. (Bernard Gibert, euclid 4332)
X574 (HARMONIC OF X187) constructed on acute reference triangle \((a, b, c) = (5, 6, 7)\) with unit baseline AB = \(1\).¶
"""GEOMETOR construction model for X_574 = HARMONIC OF X_187."""
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,
circumcenter_of,
construct_baseline_triangle,
create_model,
eval_trilinear_point,
promote_point_to_top,
symmedian_point_of,
)
from geometor.etc.render import write_center_svg
def construct_x_00574(
model: Model, A: spg.Point, B: spg.Point, C: spg.Point
) -> spg.Point:
"""Construct X_574 = HARMONIC OF X_187 on reference triangle ABC."""
X_574 = eval_trilinear_point(model, A, B, C, 'a*(a**(2) - 2*b**(2) - 2*c**(2))', ID="X_574", classes=["selected", "target"])
X_3 = circumcenter_of(model, A, B, C, ID="X_3", classes=["center", "incident"])
X_6 = symmedian_point_of(model, A, B, C, ID="X_6", classes=["center", "incident"])
central_line(model, X_3, X_6, 3, 6, incident=True)
X_2 = centroid_of(model, A, B, C, ID="X_2", classes=["center", "incident"])
X_99 = eval_trilinear_point(model, A, B, C, 'b*c/(b**(2) - c**(2))', ID="X_99", classes=["center", "incident"])
central_line(model, X_2, X_99, 2, 99, incident=True)
X_110 = eval_trilinear_point(model, A, B, C, 'csc(B - C)', ID="X_110", classes=["center", "incident"])
X_353 = eval_trilinear_point(model, A, B, C, '(a*(4*a**(4) - 2*b**(4) - 2*c**(4) - b**(2)*c**(2) - 4*a**(2)*b**(2) -4*a**(2)*c**(2)))', ID="X_353", classes=["center", "incident"])
central_line(model, X_110, X_353, 110, 353, incident=True)
return promote_point_to_top(model, X_574)
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_574 on the given reference triangle."""
model = create_model('X_574 = HARMONIC OF X_187')
A, B, C = construct_baseline_triangle(model, *sides, show_guides=show_guides)
construct_x_00574(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-00574.json"))
write_center_svg(
model_acute,
here / "x-00574.svg",
subtitle="(a, b, c) = (5, 6, 7) | AB = 1",
)