## Conversion of coordinates
between two areas

When representing a real object such as canvas, or another area on
the computer screen we need to have a way to map the positions.
That is necessary in different situations.

- When
drawing an object on a specific position.

- When a ruler
control shows area coordinates on the screen.

- When the
mouse points on the screen, we need to check if there is some
object there in the area.

###
**What we have to do?**

What area has is coordinates. We need to convert coordinates
from one area to the other and vice versa.

###
**Relation between the two areas**

The two areas exist separately with no relation between
them. When we need to have some relation between them we need to
give extra information about it. This information will help us in
the conversion. Therefore, how can we do the conversion?

- If we have array which maps the positions between the areas;

- Or we can have just one position mapping and then calculate
every other position.

The first way is obviously very slow and unpractical.

Therefore, it's better to calculate the positions. In this
case, we need less input information. One position from the first
area and one from the second. These positions correspond each
other.

Usually there is some scale between the areas and between
the measures used in different areas. Measures can be meters,
inch, and pixels. Therefore, we need the scale too.

Having the two positions, we can make the conversion. By
calculating the offset from the corresponding positions.

If we choose to give a corresponding position for the screen
position (0;0) we will have even less input parameters. Just one
position from the area and scale.

###
**Conversion without scale**

If we have two areas that are not scaled, the conversion is
pretty simple. We just have to know the positions of two points
from the different areas that correspond to each other.

We can choose position (1,1) from first area and
corresponding position (2,2) in second area. And to calculate all
other points. But for this we need to know 4 points. If we say
that the position from the second area will always be (0,0) we
don't have to keep it. This way we will have to keep only the
position from the first area.

Also, when we talk about monitor screen as second area, we
have always position (0,0) visible

So, lets: Area1X and Area1Y are the coordinates of the point
in Area1 that correspond to point (0,0) in Area2.

To find the corresponding position of Point1(5,7) which lies
in Area1 on Area2 we have the formula;

Point2X = Point1X - Area1X

Point2Y = Point1Y - Area1Y

Lets Area1X = 2 and Area1Y = 3

Point1 = (3, 5)

We
want to find the position of Point2 which lies in Area2

Point2X = Point1X - Area1X

Point2X = 3 - 2

Point2X
= 1

The same is for Point1Y

Point2Y =
Point1Y - Area1Y

Point2Y = 5 - 3

Point2Y = 2

Point2 = (1, 2)

To find the corresponding position of Point2 which resides in
Area2.

Point1X = Point2X + Area1X

Point1Y =
Point2Y + Area1Y

###
**Scale**

Scale represents the ratio between the two areas. It can be
Area1/Area2 or Area2/Area1. Which one to choose?

Area1 can be infinite. Area2 as a monitor screen is finite.
We keep information where the (0,0) position of Area2 meets the
Area1. Also we keep scale how to convert positions from Area1 to
Area2 and vice versa.

Scale=Area1/Area2

As we say Area1X will correspond to 0. We can say Scale will correspond to 1 in Area2

###
**The equation - converting area coordinate to screen**

Let us have:

AreaPosX - the x coordinate of the
position that corresponds screen 0

ScreenPosX - the x
coordinate of the screen position

Scale - the scale
between the areas.

AreaX - the coordinate for which
we search corresponding

ScreenX - the searched coordinate
on the screen.

ScreenX - ScreenPosX = (AreaX -
AreaPosX) * Scale \<=>

ScreenX = ScreenPosX + (AreaX -
AreaPosX) * Scale

But ScreenPosX = 0 in our case so

ScreenX = (AreaX - AreaPosX) * Scale

###
**Converting from screen to area**

ScreenX = (AreaX - AreaPosX) * Scale \<=>

ScreenX/Scale
= AreaX - AreaPosX \<=>

AreaX = AreaPosX + ScreenX/Scale

###
**Opposite directions of the coordinates in the areas**

When the directions are opposite, we need just to change the sign
of the offset.

For converting from area to
screen

ScreenX = - (AreaX - AreaPosX) * Scale \<=>

ScreenX = (AreaPosX - AreaX) * Scale \<=>

For
converting from area to screen

AreaX = AreaPosX -
ScreenX/Scale

Back to main menu