Drexel dragonThe Math ForumDonate to the Math Forum

Ask Dr. Math - Questions and Answers from our Archives
_____________________________________________
Associated Topics || Dr. Math Home || Search Dr. Math
_____________________________________________

Adding Angles


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)

    x' = (ac-bd)x - (ad+bc)y
    y' = (ad+bc)x + (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

[Privacy Policy] [Terms of Use]

_____________________________________
Math Forum Home || Math Library || Quick Reference || Math Forum Search
_____________________________________

Ask Dr. MathTM
© 1994-2013 The Math Forum
http://mathforum.org/dr.math/