Associated Topics || Dr. Math Home || Search Dr. Math

```
Date: 03/27/2002 at 13:05:53
From: Maes Ludwig
Subject: Coordinates or angle

I want to be able to add two angles without using sines or cosines,
because they aren't fast enough for programming games.

I mean :

o (x1/y1)
o                                   o (x2/y2)
o                   +              o
o                                 o
o- - - - - - - - - (x,o)         o- - - - - - - - - (x,o)

/(x3/y3)
/
=             /
/
/
/------------------ (x,o)

I just want to know how to rotate / or add the two angles knowing x1,
y1, x2, y2 and also knowing that we mean the angle between (x/y) and
the y-axis.

Ludwig
```

```
Date: 03/27/2002 at 22:51:25
From: Doctor Peterson
Subject: Re: Coordinates or angle

Hi, Ludwig.

For any kind of graphic programming, it is extremely useful to learn
to use vectors and matrices. That is how I would approach this.

I'm not sure whether you really meant what you said about "the angle
between (x/y) and the y-axis"; in your pictures you appear to be using
the angle between a point (x1,y1) and the x-axis. I will go by the
pictures.

The angle between the x-axis and the vector (a,b) can be seen as a
rotation from (1,0) to (a,b). This can be written as a matrix
multiplication

(x')   (a -b) (x)
(y') = (b  a) (y)

which is just a short way to write

x' = ax - by
y' = bx + ay

Notice that this takes (1,0) to (a,b), and (0,1) to (-b, a). This is
not strictly a rotation; it also multiplies a vector by the length of
(a,b). But you only care about the direction, so that doesn't matter.

So to add two angles, you just have to do two rotations, represented
by (a,b) and (c,d), in a row:

(x')   (c -d) (a -b) (x)   (ac-bd -ad-bc) (x)
(y') = (d  c) (b  a) (y) = (ad+bc  ac-bd) (y)

This will rotate the vector (1,0) to (ac-bd, ad+bc), which is
therefore the direction you are looking for. In terms of your (x1,y1)
and (x2,y2), this is

x3 = x1 x2 - y1 y2
y3 = x1 y2 + y1 x2

As an example, if (x1,y1) = (1,1) and (x2,y2) = (1,1), forming two 45
degree angles, then

x3 = 1*1 - 1*1 = 0
y3 = 1*1 + 1*1 = 2

giving a 90 degree angle represented by (0,2).

- Doctor Peterson, The Math Forum
http://mathforum.org/dr.math/
```
Associated Topics:
College Linear Algebra
High School Linear Algebra

Search the Dr. Math Library:

 Find items containing (put spaces between keywords):   Click only once for faster results: [ Choose "whole words" when searching for a word like age.] all keywords, in any order at least one, that exact phrase parts of words whole words

Submit your own question to Dr. Math
Math Forum Home || Math Library || Quick Reference || Math Forum Search