Difference between revisions of "LlAtan2"

From Second Life Wiki
Jump to navigation Jump to search
(Corrected the 'compass' function.)
m
Line 26: Line 26:
//a string with the literal compass-direction of that target towards your position
//a string with the literal compass-direction of that target towards your position
//by Ramana Sweetwater 2009/01, any use allowed license :-)
//by Ramana Sweetwater 2009/01, any use allowed license :-)
// I found this list of DIRS to be more accurate:
//    list DIRS =["SW","W","NW","N","NE","E","SE","S","SW"];
// Inanna Fairlady


string compass (vector target)  
string compass (vector target)  
{
{//-1.2732395447351 == -4/PI
     vector me = llGetPos();
     vector direction = target - llGetPos();
    float distance = llVecDist(me, target);
     list DIRS = [ "NE", "E", "SE", "S", "SW", "W", "NW", "N" ];
     list DIRS =["W","NW","N","NE","E","SE","S","SW","W"];
     integer index = llRound((llAtan2(direction.y, direction.x) * -1.2732395447351)) % 8;
     return llList2String(DIRS,llCeil(4.5-((4*llAtan2((target.y-me.y)/distance,(target.x-me.x)/distance))/PI)));
    return llList2String(DIRS, index);
}</lsl>
}</lsl>
[[/Compass QA]]
|helpers
|helpers
|also_functions=
|also_functions=

Revision as of 09:06, 4 June 2010

Summary

Function: float llAtan2( float y, float x );
0.0 Forced Delay
10.0 Energy

Returns a float that is the "Wikipedia logo"arctangent2 of y, x.

• float y
• float x

Similar to the "Wikipedia logo"arctangent(y/x) except it utilizes the signs of x & y to determine the quadrant. Returns zero if x and y are zero.
The returned value is in the range [-PI, PI][1].

Examples

<lsl>default {

 state_entry()
 {
   float num1 = llFrand(100.0);
   float num2 = llFrand(100.0);
   llOwnerSay("y = " + (string)num1);
   llOwnerSay("x = " + (string)num2);
   llOwnerSay("The arctangent of y divided by x is " + (string)llAtan2(num1, num2));
 }

}</lsl><lsl>//Function with input of a vector determining the position of a target and returning //a string with the literal compass-direction of that target towards your position //by Ramana Sweetwater 2009/01, any use allowed license :-)

string compass (vector target) {//-1.2732395447351 == -4/PI

   vector direction = target - llGetPos();
   list DIRS = [ "NE", "E", "SE", "S", "SW", "W", "NW", "N" ];
   integer index = llRound((llAtan2(direction.y, direction.x) * -1.2732395447351)) % 8;
   return llList2String(DIRS, index);

}</lsl>

/Compass QA

See Also

Functions

• llSin llAsin sine & inverse Sine
• llCos llAcos cosine & inverse cosine
• llTan tangent

Articles

•  "Wikipedia logo"Atan2
•  "Wikipedia logo"Inverse_trigonometric_function

Deep Notes

Footnotes

  1. ^ The ranges in this article are written in Interval Notation.

Signature

function float llAtan2( float y, float x );