double PoincareDistance(point p, point q){ double d = q.mobius(p).abs(); return log((1+d)/(1-d)); }
point rotateByPoint(point p, point center, double phi){ return p.mobius(center).rotate(phi).mobius(-center); }
double PoincareDistance(point p, point q){ double d = q.mobius(p).abs(); return log((1+d)/(1-d)); }
point rotateByPoint(point p, point center, double phi){ return p.mobius(center).rotate(phi).mobius(-center); }