# User:Andrew Nikitin/Projective transformation

This calculator determines parameters of projective transformation that maps four given points into 4 given points.

## Introduction

### Projective plane

Let's consider all triplets of real numbers . We will call triplets
and *equivalent* when
.
We will call the set of equivalence classes the *projective plane* and
each equivalence class a *point* on this plane.

Point of the regular plane can be identified wit point of the projective plane and point can be identified with point of the regular plane.

Points of
the projective plane do not have corresponding points on the regular plane and are
called *inifinite points*.

Point constitutes a class in itself.

For any given set of coefficients the set of points defined by
is called a *projective straight line*.

### Projective transformation

Linear transformation in the projective plane

corresponds to projective transformation of the regular plane

The important property of this transformation is that it transforms straight lines into straight lines.

The following J verb implements a projective transformation.
It accepts a 3-element vector, which represents an arbitrary point on the projective
plane. Alternatively, as a shortcut, 2-element vector `(x,y)` corresponds to
finite point `(x,y,1)`.
[{{#file: "projective transformation"}} Download script: projective transformation ]

NB. M is in transposed form compared to natural amv=:(}:%{:)@(+/ . * 3&({.!.1))"2 1

To visualise the transformation, we will use grid `G0` as defined below and
transform it to a projected grid. Then we will plot both grids.
We will define a variant of the `amv` verb, called `amc`, which
treats complex numbers as finite points of the projective plane and transforms them
appropriately.
[{{#file: "projective transformation"}} Download script: projective transformation ]

amc=: (j./"1@amv +.) G0=:(<: %~ [: j./~ i.)11

### Choosing a projective transformation

A projective transformation is defined by its 9 coefficients, but since projective transformation remains the same if all coefficients are multiplied by a non-zero number, only 8 of them are independent.

If we want point to become under some projective transformation,
then coefficients of this transformation must satisfy

or

0 : 0 x0 y0 1 0 0 0 -x1x0 -x1y0 -x1 0 0 0 x0 y0 1 -y1x0 -y1y0 -y1 straight lines are set of points (x,y,z) so that ax+by+cz=0, denoted (a,b,c) lx0=.1 0 0 NB. vertical line x=0 lx1=.1 0 _1 NB. vertical line x=1 lx2=.1 0 _2 NB. vertical x=2 cleanup (1 0 _2 mp %. M) mp |:1,.~ M amv t )

If M is a transformation, then straight line *L=(a,b,c)* transforms into *L·inv(M)*
Indeed, *(L·inv(M))·(M p)=L p=0*.

*(α,β,γ)=M·(α',β',γ')*