# Generalized circles and Möbius transformations

Posted on March 12, 2019 by Stéphane Laurent
Tags: R, maths, geometry

It is well known that a Möbius transformation maps a generalized circle to a generalized circle. In this blog post, not only we prove this fact, but we also provide the equation of the image generalized circle.

# Generalized circle

A generalized circle is a circle or a line. We shall see that a generalized circle $$\mathcal{C}$$ has equation $Az\bar{z} + \bar{\gamma}z + \gamma\bar{z} = D$ where $$A$$ and $$D$$ are real numbers, $$\gamma \in \mathbb{C}$$, and

• $$A=0$$, $$D \geq 0$$, $$\gamma \neq 0$$, when $$\mathcal{C}$$ is a line;

• $$A \neq 0$$ when $$\mathcal{C}$$ is a circle, and $${|\gamma|}^2 + AD > 0$$.

## Circle equation

The circle with center $$z_0$$ and radius $$R$$ has equation $$|z-z_0|=R$$. Now, $|z-z_0|=R \ \ \iff \ \ {|z-z_0|}^2=R^2 \ \ \iff (z-z_0)\overline{(z-z_0)} = R^2$ $\tag{1}\iff \ \ z \bar z - \bar{z_0}z - z_0\bar{z} = R^2 - {|z_0|}^2.$

Now, let the equation $Az\bar{z} + \bar{\gamma}z + \gamma\bar{z} = D$ with $$A$$, $$D$$ real numbers, $$A \neq 0$$, and $$\gamma \in \mathbb{C}$$.

It is equivalent to $z\bar{z} + \frac{\bar{\gamma}}{A}z + \frac{\gamma}{A}\bar{z} = \frac{D}{A}.$

Then it has the same form as $$(1)$$ with $z_0 = - \frac{\gamma}{A}$ and $R^2 = {|z_0|}^2 + \frac{D}{A} > 0.$ Thus $\dfrac{{|\gamma|}^2}{A^2} + \frac{D}{A} > 0,$ that is $${|\gamma|}^2 + AD > 0$$.

## Line equation

The general equation of a line is $\cos\theta \cdot x + \sin\theta \cdot y = d$ where $$\theta \in [0,2\pi)$$ is the direction of the line, and $$d \geq 0$$ is its offset.

Letting $$z = x+iy$$, it is equivalent to $\bar{\gamma}z + \gamma\bar{z} = D$ with $$\cos\theta = \frac{\Re(\gamma)}{|\gamma|}$$ and $$\sin\theta = \frac{\Im(\gamma)}{|\gamma|}$$, hence $$\theta = \textrm{arg}(\gamma)$$, and $$d = \frac{D}{2|\gamma|}$$. Indeed, $\bar{\gamma}z + \gamma\bar{z} = D \ \ \iff \ \ \frac{\bar{\gamma}}{|\gamma|} z + \frac{\gamma}{|\gamma|}\bar{z} = \frac{D}{|\gamma|}$ $\ \ \iff \left( \frac{\bar{\gamma} + \gamma}{|\gamma|} \right) x + \left( \frac{\bar{\gamma} - \gamma}{|\gamma|} \right) i y = \frac{D}{|\gamma|}$ $\ \ \iff \left( \frac{\Re(\gamma)}{|\gamma|} \right) x + \left( \frac{\Im(\gamma)}{|\gamma|} \right) y = \frac{D}{2|\gamma|}.$

Conversely, if the equation $$\cos\theta \cdot x + \sin\theta \cdot y = d$$ is given, then one can take $$\gamma = \cos\theta + i \sin\theta$$, and $$D = 2d$$.

# Möbius transformations

A Möbius transformation is a function $$M \colon \hat{\mathbb{C}} \to \hat{\mathbb{C}}$$ of the form $M(z) = \frac{az+b}{cz+d},$ where $$a$$, $$b$$, $$c$$, $$d$$ are complex numbers satisfying $$ad - bc \neq 0$$, and we agree with

• $$M(\infty) = \infty$$ if $$c = 0$$ (hence $$d \neq 0$$);

• otherwise, $$M(\infty) = a/c$$ and $$M(-d/c) = \infty$$.

We say that the matrix $A = \begin{pmatrix} a & b \\ c & d \end{pmatrix}$ is associated with $$M$$. Note that $$A$$ is invertible because of the condition $$ad - bc \neq 0$$.

Also note that $$M(z) \equiv z$$ means that the identity matrix is associated with $$M$$.

## Composition of Möbius transformations

Let $$M_1$$ and $$M_2$$ be two Möbius transformations, $$A_1$$ a matrix associated with $$M_1$$ and $$A_2$$ a matrix associated with $$M_2$$. Then $$M := M_1 \circ M_2$$ is a Möbius transformation and $$A_1A_2$$ is a matrix associated with $$M$$.

As a consequence, any Möbius transformation $$M$$ is invertible and its inverse is the Möbius transformation associated to the matrix $$\begin{pmatrix} d & -b \\ -c & a \end{pmatrix}$$ if $$\begin{pmatrix} a & b \\ c & d \end{pmatrix}$$ is a matrix associated with $$M$$.

## Image of a generalized circle

We shall see that a Möbius transformations maps a generalized circle to a generalized circle. We denote by $$M$$ the Möbius transformation associated to $$\begin{pmatrix} a & b \\ c & d \end{pmatrix}$$.

### Image of a circle

Let $$\mathcal{C}$$ be the circle of center $$z_0$$ and radius $$R$$. We have seen that $$\mathcal{C}$$ has equation $z \bar z - \bar{z_0}z - z_0\bar{z} = R^2 - {|z_0|}^2.$ We set $$H = R^2 - {|z_0|}^2$$. Inserting $$z = M^{-1}(w) = \frac{dw - b}{a - cw}$$, we get $(dw - b)\overline{(dw - b)} - \bar{z_0}(dw - b)\overline{(a - cw)} - z_0 \overline{(dw - b)}(a-cw) \\ = H (a - cw)\overline{(a - cw)},$ that is, \begin{align} & \Bigl( d\bar{d} + d\bar{c}\bar{z_0} + \bar{d}c z_0 - H c\bar{c} \Bigr) w \bar{w} \\ \qquad & - \Bigl( d\bar{b} + d\bar{a}\bar{z_0} + c\bar{b}z_0 - H c\bar{a} \Bigr) w \\ \qquad & - \Bigl( b\bar{d} + b\bar{c}\bar{z_0} + \bar{d}a z_0 - H a\bar{c} \Bigr) \bar{w} \\ = & \; H a\bar{a} - b\bar{b} - b\bar{a}\bar{z_0} - \bar{b}a z_0. \end{align} Now, \begin{align} d\bar{d} + d\bar{c}\bar{z_0} + \bar{d} c z_0 - H c\bar{c} & = (d + c z_0)\overline{(d + c z_0)} - R^2 c\bar{c} \\ & = {|d+c z_0|}^2 - R^2{|c|}^2 \\ & =: A, \end{align} \begin{align} H a\bar{c} - b\bar{d} - b\bar{c}\bar{z_0} - \bar{d}a z_0 & = R^2 a\bar{c} - (a z_0 + b)\overline{(c z_0 + d)} \\ & =: \gamma, \end{align} \begin{align} H a\bar{a} - b\bar{b} - b\bar{a}\bar{z_0} - \bar{b}a z_0 & = R^2 a\bar{a} - (b + a z_0)\overline{(b + a z_0)} \\ & = R^2{|a|}^2 - {|b + a z_0|}^2 \\ & =: D. \end{align} The equation is $A w\bar{w} + \bar\gamma w + \gamma\bar{w} = D.$

If $$\boxed{A \neq 0}$$, that is $$|d+c z_0| \neq R|c|$$, this is the equation of the circle with center $$-\gamma/A$$ and radius $$\sqrt{\frac{{|\gamma|}^2}{A^2} + \frac{D}{A}}$$.

Let’s check with R. To do so, we use the circumcircle function below, which returns the center and the radius of the circle passing by z1, z2, z3.

circumcircle <- function(z1,z2,z3){
x1 <- Re(z1); y1 <- Im(z1); p1 <- c(x1,y1)
x2 <- Re(z2); y2 <- Im(z2); p2 <- c(x2,y2)
x3 <- Re(z3); y3 <- Im(z3); p3 <- c(x3,y3)
a <- det(cbind(rbind(p1,p2,p3),1))
q1 <- c(crossprod(p1))
q2 <- c(crossprod(p2))
q3 <- c(crossprod(p3))
q <- c(q1,q2,q3)
x <- c(x1,x2,x3)
y <- c(y1,y2,y3)
Dx <- det(cbind(q,y,1))
Dy <- -det(cbind(q,x,1))
c <- det(cbind(q,x,y))
center <- c(Dx,Dy)/a/2
r <- sqrt(c(crossprod(center-p1)))
list(center = center + 1i*center, radius = r)
}

Let’s take an example:

Mobius <- function(a, b, c, d){
function(z){
(a*z+b) / (c*z+d)
}
}
a <- 4; b <- 1i; c <- 2i; d <- 1+3i
M <- Mobius(a,b,c,d)
# define circle C
z0 <- 2+1i; R <- 2
# three points on M(C)
z1 <- M(z0+R); z2 <- M(z0-R); z3 <- M(z0 + 1i*R)
# circumcircle of z1, z2, z3
cc <- circumcircle(z1, z2, z3)
# calculation of A, gamma, D
A <- Mod(d+c*z0)^2 - R^2*Mod(c)^2
gamma <- R^2*a*Conj(c) - (a*z0 + b) * Conj(c*z0 + d)
D <- R^2*Mod(a)^2 - Mod(b + a*z0)^2
# center
-gamma/A
##  0.7941176-0.8529412i
cc$center ##  0.7941176-0.8529412i # radius sqrt(Mod(gamma)^2/A^2 + D/A) ##  0.7892005 cc$radius
##  0.7892005

We have the following alternative expressions of the center and the radius: $w_0 = M\left(z_0 - R^2\overline{\left(\frac{d}{c}+z_0\right)} \right), \\ R' = \bigl| w_0 - M(z_0+R) \bigr|.$

z <- z0 - R^2/Conj(d/c+z0)
( w0 <- M(z) ) # center
##  0.7941176-0.8529412i
##  0.7892005

This code also works for $$c = 0$$:

MC <- function(a, b, c, d, z0, R){
M <- Mobius(a,b,c,d)
z <- z0 - R^2/Conj(d/c+z0)
w0 <- M(z)
list(center = w0, radius = Mod(w0 - M(z0+R)))
}
c <- 0
M <- Mobius(a,b,c,d)
z1 <- M(z0+R); z2 <- M(z0-R); z3 <- M(z0 + 1i*R)
circumcircle(z1, z2, z3)
## $center ##  2.3-1.9i ## ##$radius
##  2.529822
MC(a, b, c, d, z0, R)
## $center ##  2.3-1.9i ## ##$radius
##  2.529822

Now, consider the case when $$\boxed{A=0}$$, that is $$|d/c+z_0| = R$$. The equation is $\bar\gamma w + \gamma\bar{w} = D.$ And this is the equation of a line, whose direction and offset are given by the formulas we have previously seen.

### Image of a line

Now, let $$\mathcal{L}$$ be the line having equation $\bar{\gamma_0} z + \gamma_0\bar{z} = D_0.$ Inserting $$z = M^{-1}(w) = \frac{dw - b}{a - cw}$$, we get the following equation for $$M(\mathcal{L})$$: $\bar{\gamma_0} (dw - b)\overline{(a-cw)} + \gamma_0 \overline{(dw - b)}(a-cw) = D_0(a-cw)\overline{(a-cw)}.$ It is equivalent to \begin{align*} & -\Bigl( \bar{\gamma_0}d\bar{c} + \gamma_0 \bar{d}c + D_0 c\bar{c} \Bigr) w\bar{w} \\ \qquad & + \Bigl( \bar{\gamma_0}d\bar{a} + \gamma_0 \bar{b}c + D_0 c\bar{a} \Bigr) w \\ \qquad & + \Bigl( \bar{\gamma_0}b\bar{c} + \gamma_0 \bar{d}a + D_0 \bar{c}a \Bigr) \bar{w} \\ & \qquad = \; D_0 a \bar{a} + \bar{\gamma_0}b\bar{a} + \gamma_0\bar{b}a, \end{align*} that is $A w\bar{w} + \bar{\gamma}w + \gamma\bar{w} = D$ with $A = -2\;\Re(\gamma_0 c \bar{d}) - D_0 {|c|}^2, \\ \gamma = \bar{\gamma_0}b\bar{c} + \gamma_0 \bar{d}a + D_0 \bar{c}a, \\ D = D_0{|a|}^2 + 2\;\Re(\gamma_0 \bar{b}a).$

Again, there are two cases. We get a circle if $$A \neq 0$$, and a line otherwise.

Let’s check an example with $$A=0$$. Our current value of $$c$$ in R is $$0$$, so we have $$A=0$$.

# define the line L
theta <- 1
offset <- 2
# three points on M(L)
x <- c(0,1,2)
y <- (offset - cos(theta)*x) / sin(theta)
z1 <- M(x + 1i*y)
z2 <- M(x + 1i*y)
z3 <- M(x + 1i*y)
# these points are aligned:
Im((z2-z1)/(z3-z1)) # aligned <=> 0
##  -7.157799e-17

Now let’s check an example with $$A \neq 0$$:

# Mobius transformation
c <- 6 # don't take c = 0, otherwise A=0
M <- Mobius(a,b,c,d)
# three points on M(L)
z1 <- M(x + 1i*y)
z2 <- M(x + 1i*y)
z3 <- M(x + 1i*y)
# calculation of A, gamma, D
gamma0 <- cos(theta) + 1i * sin(theta)
D0 <- 2 * offset
A <- -2 * Re(gamma0*c*Conj(d)) - D0*Mod(c)^2
gamma <- Conj(gamma0)*b*Conj(c) + gamma0*Conj(d)*a + D0*Conj(c)*a
D <- D0 * Mod(a)^2 + 2*Re(gamma0*Conj(b)*a)
# circumcircle
cc <- circumcircle(z1, z2, z3)
# center
-gamma/A
##  0.626783+0.0006863i
cc$center ##  0.626783+0.0006863i # radius sqrt(Mod(gamma)^2/A^2 + D/A) ##  0.03988958 cc$radius
##  0.03988958

# R code

Mobius <- function(a, b, c, d){
function(z){
(a*z+b) / (c*z+d)
}
}

Mod2 <- function(z){
Re(z)^2 + Im(z)^2
}

MobiusImageOfCircle <- function(a, b, c, d, z0, R){
gamma <- R*R*a*Conj(c) - (a*z0 + b) * Conj(c*z0 + d)
D <- R*R*Mod2(a) - Mod2(b + a*z0)
x1 <- Mod2(d+c*z0)
x2 <- R*R*Mod2(c)
if(x1 != x2){
A <- x1 - x2
out <- list(center = -gamma/A, radius = sqrt(Mod2(gamma)/A/A + D/A))
attr(out, "type") <- "circle"
}else{
out <- list(theta = Arg(gamma) %% (2*pi), offset = D/2/Mod(gamma))
attr(out, "type") <- "line"
}
out
}

MobiusImageOfLine <- function(a, b, c, d, theta, offset){
gamma0 <- cos(theta) + 1i*sin(theta)
D0 <- 2 * offset
A <- -2 * Re(gamma0*c*Conj(d)) - D0*Mod2(c)
gamma <- Conj(gamma0)*b*Conj(c) + gamma0*Conj(d)*a + D0*Conj(c)*a
D <- D0*Mod2(a) + 2*Re(gamma0*Conj(b)*a)
if(A != 0){
out <- list(center = -gamma/A, radius = sqrt(Mod2(gamma)/A/A + D/A))
attr(out, "type") <- "circle"
}else{
out <- list(theta = Arg(gamma) %% (2*pi), offset = D/2/Mod(gamma))
attr(out, "type") <- "line"
}
out
}

MobiusImage <- function(a, b, c, d, gcircle){
if(attr(gcircle, "type") == "circle"){
MobiusImageOfCircle(a, b, c, d, gcircle$center, gcircle$radius)
}else{
MobiusImageOfLine(a, b, c, d, gcircle$theta, gcircle$offset)
}
}

# plot ####
drawLine <- function(line, ...){
theta <- line$theta; offset <- line$offset
if(sin(theta) != 0){
abline(a = offset/sin(theta), b = -1/tan(theta), ...)
}else{
abline(v = offset/cos(theta), ...)
}
}

drawCircle <- function(circle, ...){
plotrix::draw.circle(Re(circle$center), Im(circle$center),
}