Algebra({
metric:[0,1,1],
basis:['1','e0','e1','e2','e01','e02','e12','e012']
}, ()=>{
var point = (x,y)=>1e12+x*1e02+y*1e01,
{sin, cos, PI} = Math;
var A=point(-.3,0.5).Normalized, B=point(0.5,.5).Normalized, C=point(0,0).Normalized,
a=()=>B&C,b=()=>C&A,c=()=>A&B,
centroid = ()=>(A+B+C).Normalized,
oa=()=>(a<<A).Normalized, ob=()=>(b<<B).Normalized, oc=()=>(c<<C).Normalized, ortho=()=>oa^ob,
ca=()=>(c<<(A+B)).Normalized, cb=()=>(a<<(B+C)).Normalized, cc=()=>(b<<(C+A)).Normalized, circum=()=>ca^cb,
euler = ()=>(ortho&circum).Normalized,
orthoL = ()=>polarLine(ortho).Normalized,
s = ()=>a*b*c+b*c*a+c*a*b+a*c*b+b*a*c+c*b*a;
function polarLine(X){
var ax = ()=> X&A, bx =()=> X&B, cx =()=> X&C;
var AX = ()=> ax^a, BX =()=> bx^b, CX = ()=> cx^c;
var am = ()=> BX&CX, bm =()=> CX&AX, cm =()=> AX&BX;
var AM = ()=> am^a, BM = ()=> bm^b, CM = ()=> cm^c;
return ()=>AM&BM;
};
var disc = [...Array(100)]
.map((x,i)=>point(sin(i/50*PI),cos(i/50*PI)))
.map((x,i,a)=>[x,a[i+1]||a[0]]);
return this.graph(()=>{
var odote = euler<<orthoL;
return ["Triangle centers","o.e="+odote.s.toFixed(4),
0xFFFFEE,[A,B,C],
0xaaaaaa,a,"a",b,"b",c,"c",
0xAA8888,oa,ob,oc,ortho,"O", polarLine(ortho), "o",
0x448844,ca,cb,cc,circum,"C",0x00ff00,polarLine(circum),"c",
0x8888AA,centroid,"M",polarLine(centroid),"m",euler,"Euler Line",
0x444444,A,"A",B,"B",C,"C",
0x000000,...(1e0*1e0==-1?disc:[]),
0xff0000,()=>orthoL^euler,"X",s,"s"]
}, {
pointRadius:1.5,
lineWidth:2,
fontSize:1.5,
grid:true,
scale:2,
width:window.innerWidth,
animate:true});
})