Math wizardry

Jim Hurley jhurley at infostations.com
Tue Mar 29 08:14:29 EST 2005


>
>Message: 15
>Date: Mon, 28 Mar 2005 11:02:18 -0800
>From: Jim MacConnell <jmac at consensustech.com>
>Subject: Re: Math wizardry
>To: RevList <use-revolution at lists.runrev.com>
>Message-ID: <BE6D94BA.C202%jmac at consensustech.com>
>Content-Type: text/plain;	charset="US-ASCII"
>
>Richard,
>
>>All of these give different values for the resulting angles, depending
>>on the direction from which the lines are drawn. How do I consistently
>>determine the angle between the two lines?
>
>I think you may want to take a different approach. Since the user is drawing
>the lines, it sounds like you actually know the "coordinates" of three
>points, (Call them A, B and C). That means you know everything you need to
>know to define all the angles.
>
>(snip)
>
>The advantage here is that there are no signs to deal with... The only thing
>that matters is the length between points.
>
>Now if you want to know the angles of the two lines in real space, calculate
>the angle of LineAB (or another) and use addition to get the others.


Jim,

Perhaps even easier would be to define a function which determines 
the *geometrical* angle associated with a line in Run Rev.  Any 
geometrical line rotated 180 degrees is the same geometrical line. 
Therefore the function below eliminates the signs associated with Run 
Rev angle.

function theGeometrialAngle p1,p2
   --Geometrical angle of line defined by the two points p1 and p2
   get the paramcount
   if it is 1 then
     put line 2 of p1 into p2
     put line 1 of p1 into p1
   end if
   put item 1 of p2 - item 1 of p1 into dx
   put item 2 of p2 - item 2 of p1 into dy
   put atan2(dy,dx) into tAngle
   --Add or subtract pi as needed.
   switch
   case  tAngle < 0
     return tAngle + pi
     break
   case  tAngle > pi
     return tAngle - pi
     break
   default
     return tAngle
   end switch
end theGeometrialAngle

function tAngleBetween a1,a2
   return abs(a1 - a2)
end tAngleBetween

And so the geometrical angle between two Run Rev lines is just the 
absolute value of the difference.

Jim


More information about the use-livecode mailing list