.geometry "version 0.51";
.l0; 
.text("Tringle Center Locator:
On this figure, construct the center that interests you.
Make the final point non-white (cyan, for example).
Edit the geometry, and you will find toward the end
your cyan point containing '[.cyan, .in]'. Change this to
'.cyan'.  Then step through the 'proof'", .l0);
.macro .vertex trilinear(.vertex v1, .vertex v2, .vertex v3, .flt f1, .flt f2, .flt f3)
{
    ang1 = .a.vvv(v3, v1, v2, .in);
    ang2 = .a.vvv(v1, v2, v3, .in);
    ang3 = .a.vvv(v2, v3, v1, .in);
    a1 = .f.rpn(f2, ang1, .sin, .mul, f3, 
        f2, ang1, .cos, .mul, .add, 
        .atan2);
    a2 = .f.rpn(f3, ang2, .sin, .mul, f1, 
        f3, ang2, .cos, .mul, .add, 
        .atan2);
    a3 = .f.rpn(f1, ang3, .sin, .mul, f2, 
        f1, ang3, .cos, .mul, .add, 
        .atan2);
    A1 = .a.f(a1);
    A2 = .a.f(a2);
    A3 = .a.f(a3);
    va1 = .v.avv(A1, v3, v1, .in);
    va2 = .v.avv(A2, v1, v2, .in);
    va3 = .v.avv(A3, v2, v3, .in);
    l1 = .l.vv(v1, va1, .in);
    l2 = .l.vv(v2, va2, .in);
    l3 = .l.vv(v3, va3, .in);
    .return v4 = .v.ll(l1, l2, .in);
}
v1 = .free(-0.305389, 0.511976, "A");
v2 = .free(0.691617, -0.45509, "B");
v3 = .free(-0.811377, -0.236527, "C");
a1 = .a.vvv(v3, v1, v2, .in, "\alpha");
a2 = .a.vvv(v1, v2, v3, .in, "\beta");
a3 = .a.vvv(v2, v3, v1, .in, "\gamma");
a = .f.vv(v2, v3);
b = .f.vv(v1, v3);
c = .f.vv(v1, v2);
incenter = trilinear(v1, v2, v3, 1.000000, 1.000000, 1.000000, .l1, "I");
l1 = .l.vv(v1, v2);
l2 = .l.vv(v2, v3);
l3 = .l.vv(v3, v1);
excenter1 = trilinear(v1, v2, v3, -1.000000, 1.000000, 1.000000, .l1, "E\sub{1}");
excenter2 = trilinear(v1, v2, v3, 1.000000, -1.000000, 1.000000, .l1, "E\sub{2}");
excenter3 = trilinear(v1, v2, v3, 1.000000, 1.000000, -1.000000, .l1, "E\sub{3}");
ainv = .f.rpn(1.000000, a, .div);
binv = .f.rpn(1.000000, b, .div);
cinv = .f.rpn(1.000000, c, .div);
centroid = trilinear(v1, v2, v3, ainv, binv, cinv, .l1, "M");
circa = .f.rpn(a1, .cos);
circb = .f.rpn(a2, .cos);
circc = .f.rpn(a3, .cos);
circumcenter = trilinear(v1, v2, v3, circa, circb, circc, .l1, "O");
ortha = .f.rpn(1.000000, circa, .div);
orthb = .f.rpn(1.000000, circb, .div);
orthc = .f.rpn(1.000000, circc, .div);
orthocenter = trilinear(v1, v2, v3, ortha, orthb, orthc, .l1, "H");
v4 = .v.vvmid(circumcenter, orthocenter, .l1, "N");
.text("Elementary Centers:
I, E\sub{1}, E\sub{2}, E\sub{3}: Incenter and 3 Excenters
O, M, H: Circumcenter, Centroid, Orthocenter
N: Nine-point center.", .l1);
lemoine = trilinear(v1, v2, v3, a, b, c, .l2, "L");
gerg1 = .f.rpn(1.000000, a1, 0.500000, .mul, .cos, 
        .dup, .mul, .div);
gerg2 = .f.rpn(1.000000, a2, 0.500000, .mul, .cos, 
        .dup, .mul, .div);
gerg3 = .f.rpn(1.000000, a3, 0.500000, .mul, .cos, 
        .dup, .mul, .div);
gergonne = trilinear(v1, v2, v3, gerg1, gerg2, gerg3, .l2, "G");
nag1 = .f.rpn(b, c, .add, a, .sub, 
        a, .div);
nag2 = .f.rpn(c, a, .add, b, .sub, 
        b, .div);
nag3 = .f.rpn(a, b, .add, c, .sub, 
        c, .div);
nagel = trilinear(v1, v2, v3, nag1, nag2, nag3, .l2, "N");
mit1 = .f.rpn(b, c, .add, a, .sub);
mit2 = .f.rpn(c, a, .add, b, .sub);
mit3 = .f.rpn(a, b, .add, c, .sub);
mittenpunkt = trilinear(v1, v2, v3, mit1, mit2, mit3, .l2, "M");
.text("More centers:
G, L: Gergonne Point, Lemoine Point
N, M: Nagel Point, Mittenpunkt.", .l2);
sp1 = .f.rpn(b, c, .add, a, .div);
sp2 = .f.rpn(c, a, .add, b, .div);
sp3 = .f.rpn(a, b, .add, c, .div);
spieker = trilinear(v1, v2, v3, sp1, sp2, sp3, .l3, "S");
feuer1 = .f.rpn(1.000000, a2, a3, .sub, .cos, 
        .sub);
feuer2 = .f.rpn(1.000000, a3, a1, .sub, .cos, 
        .sub);
feuer3 = .f.rpn(1.000000, a1, a2, .sub, .cos, 
        .sub);
feuerbach = trilinear(v1, v2, v3, feuer1, feuer2, feuer3, .l3, "F");
ferm1 = .f.rpn(1.000000, a1, 3.141593, 3.000000, .div, 
        .add, .sin, .div);
ferm2 = .f.rpn(1.000000, a2, 3.141593, 3.000000, .div, 
        .add, .sin, .div);
ferm3 = .f.rpn(1.000000, a3, 3.141593, 3.000000, .div, 
        .add, .sin, .div);
fermat = trilinear(v1, v2, v3, ferm1, ferm2, ferm3, .l3, "Fmt");
.text("More Centers:
S, F: Spieker, Feuerbach
Fmt: Fermat.", .l3);
.text("More Centers:
Ig2:  2\sup{nd} Isogonic Center.
(The Fermat Point is the 1\sup{st} Isogonic Center).", .l4);
ig1 = .f.rpn(1.000000, a1, 3.141593, 3.000000, .div, 
        .sub, .sin, .div);
ig2 = .f.rpn(1.000000, a2, 3.141593, 3.000000, .div, 
        .sub, .sin, .div);
ig3 = .f.rpn(1.000000, a3, 3.141593, 3.000000, .div, 
        .sub, .sin, .div);
isogonic2 = trilinear(v1, v2, v3, ig1, ig2, ig3, .l4, "Ig2");
isod1 = .f.rpn(a1, 3.141593, 3.000000, .div, .add, 
        .sin);
isod2 = .f.rpn(a2, 3.141593, 3.000000, .div, .add, 
        .sin);
isod3 = .f.rpn(a3, 3.141593, 3.000000, .div, .add, 
        .sin);
isodynamic1 = trilinear(v1, v2, v3, isod1, isod2, isod3, .l5, "Idy1");
isod11 = .f.rpn(a1, 3.141593, 3.000000, .div, .sub, 
        .sin);
isod21 = .f.rpn(a2, 3.141593, 3.000000, .div, .sub, 
        .sin);
isod31 = .f.rpn(a3, 3.141593, 3.000000, .div, .sub, 
        .sin);
isodynamic2 = trilinear(v1, v2, v3, isod11, isod21, isod31, .l6, "Idy2");
nap1 = .f.rpn(1.000000, a1, 3.141593, 6.000000, .div, 
        .add, .sin, .div);
nap2 = .f.rpn(1.000000, a2, 3.141593, 6.000000, .div, 
        .add, .sin, .div);
nap3 = .f.rpn(1.000000, a3, 3.141593, 6.000000, .div, 
        .add, .sin, .div);
napolean1 = trilinear(v1, v2, v3, nap1, nap2, nap3, .l5, "N1");
nap11 = .f.rpn(1.000000, a1, 3.141593, 6.000000, .div, 
        .sub, .sin, .div);
nap21 = .f.rpn(1.000000, a2, 3.141593, 6.000000, .div, 
        .sub, .sin, .div);
nap31 = .f.rpn(1.000000, a3, 3.141593, 6.000000, .div, 
        .sub, .sin, .div);
napolean2 = trilinear(v1, v2, v3, nap11, nap21, nap31, .l6, "N2");
.text("More Centers:
Idy1: 1\sup{st} Isodynamic Center
N1: 1\sup{st} Napolean Point.", .l5);
.text("More Centers:
Idy2: 2\sup{nd} Isodynamic Center
N2: 2\sup{nd} Napolean Point.", .l6);
cru1 = .f.rpn(a1, .sin, a1, .cos, .div);
cru2 = .f.rpn(a2, .sin, a2, .cos, .div);
cru3 = .f.rpn(a3, .sin, a3, .cos, .div);
crucial = trilinear(v1, v2, v3, cru1, cru2, cru3, .l7, "C");
delong1 = .f.rpn(a1, .cos, a2, .cos, a3, 
        .cos, .mul, .sub);
delong2 = .f.rpn(a2, .cos, a3, .cos, a1, 
        .cos, .mul, .sub);
delong3 = .f.rpn(a3, .cos, a1, .cos, a2, 
        .cos, .mul, .sub);
delongchamps = trilinear(v1, v2, v3, delong1, delong2, delong3, .l7, "D");
sch1 = .f.rpn(1.000000, a2, .cos, a3, .cos, 
        .add, .div);
sch2 = .f.rpn(1.000000, a3, .cos, a1, .cos, 
        .add, .div);
sch3 = .f.rpn(1.000000, a1, .cos, a2, .cos, 
        .add, .div);
schiffler = trilinear(v1, v2, v3, sch1, sch2, sch3, .l7, "S");
.text("More centers:
C: Crucial Point
D: De Longchamps Point
S: Schiffler Point.", .l7);
ex1 = .f.rpn(a, b, b, b, b, 
        .mul, .mul, .mul, c, c, 
        c, c, .mul, .mul, .mul, 
        .add, a, a, a, a, 
        .mul, .mul, .mul, .sub, .mul);
ex2 = .f.rpn(b, c, c, c, c, 
        .mul, .mul, .mul, a, a, 
        a, a, .mul, .mul, .mul, 
        .add, b, b, b, b, 
        .mul, .mul, .mul, .sub, .mul);
ex3 = .f.rpn(c, a, a, a, a, 
        .mul, .mul, .mul, b, b, 
        b, b, .mul, .mul, .mul, 
        .add, c, c, c, c, 
        .mul, .mul, .mul, .sub, .mul);
exeter = trilinear(v1, v2, v3, ex1, ex2, ex3, .l8, "E");
bro1 = .f.rpn(a, b, b, .mul, c, 
        c, .mul, .add, .mul);
bro2 = .f.rpn(b, c, c, .mul, a, 
        a, .mul, .add, .mul);
bro3 = .f.rpn(c, a, a, .mul, b, 
        b, .mul, .add, .mul);
brocardmid = trilinear(v1, v2, v3, bro1, bro2, bro3, .l8, "B");
.text("More centers:
E: Exeter Point
B: Brocard Midpoint.", .l8);
