Algebra(3,1,()=>{
var ni = 1e4+1e3,
no = .5e4-.5e3;
var point = (x,y)=>no + x*1e1 + y*1e2 + 0.5*(x*x+y*y)*ni,
line = (a,b,c)=>!(a*1e1 + b*1e2 + c*ni),
circle = (x,y,r)=>!(point(x,y) - r**2/2*ni);
var up = (x)=> no + x + .5*x*x*ni;
var dist=(x,y)=>(2*(x<<y).Length)**0.5,
angle=(x,y)=>Math.acos(!x.Normalized<<!y.Normalized);
var B = line(1,0,0),
p1 = point(-1,0),
p2 = point(0,1),
ray1 = () => (p1^p2^ni);
var P = () => up((ni^no)<<(ray1&B^no));
return (this.graph([
p1, p2,
ray1, "r1",
0x000000,
B, "B",
0xFF0000,
P, "P",
],{conformal:true,grid:true}));
});