Difference between revisions of "LlAtan2"

From Second Life Wiki
Jump to: navigation, search
m (LlAtan2 moved to LSL llAtan2)
(Adding a haiku)
 
(45 intermediate revisions by 14 users not shown)
Line 1: Line 1:
{{lowercase|llAtan2}}
+
{{LSL Function
__NOTOC__
+
|func_id=3|func_sleep=0.0|func_energy=10.0
 +
|func=llAtan2|sort=Atan2
 +
|p1_type=float|p1_name=y|p1_desc
 +
|p2_type=float|p2_name=x|p2_desc
 +
|return_type=float
 +
|return_text=that is the {{wikipedia|Atan2|arctangent2}} of {{LSLP|y}}, {{LSLP|x}}.
 +
|func_footnote=Similar to the <span class="plainlinks">{{wikipedia|Inverse_trigonometric_functions|arctangent}}</span>({{LSLP|y}}/{{LSLP|x}}) except it utilizes the signs of {{LSLP|x}} & {{LSLP|y}} to determine the quadrant and avoids  division by zero. <br />
 +
|spec=
 +
If {{LSLP|x}} is positive zero and...
 +
* {{LSLP|y}} is zero, '''zero''' is returned.
 +
* {{LSLP|y}} is positive, '''PI/2''' is returned.
 +
* {{LSLP|y}} is negative, '''-PI/2''' is returned.
 +
If {{LSLP|x}} is negative zero and...
 +
* {{LSLP|y}} is positive zero, '''PI''' is returned.
 +
* {{LSLP|y}} is negative zero, '''-PI''' is returned.
 +
* {{LSLP|y}} is positive, '''PI/2''' is returned.
 +
* {{LSLP|y}} is negative, '''-PI/2''' is returned.
  
{| width="100%"
+
Or
|-
+
<source lang="lsl2">
|<div id="box">
+
if((string)x != (string)0.0 && y == 0.0)//negative zero
== [[LSL_Type_float|float]] llAtan2( [[LSL_Type_float|float]] y, [[LSL_Type_float|float]] x); ==
+
    return PI * ~-2*((string)y != (string)0.0));
<div style="padding: 0.5em">
+
return ((y > 0) - (y < 0)) * PI_BY_TWO;
* y - .
+
</source>
* x - .
+
The returned value is in the range {{Interval|gte=-[[PI]]|gteh=-PI|lte=PI|center=return}}{{Interval/Footnote}}.
</div>
+
|caveats
</div>
+
|constants
|-
+
|examples=<source lang="lsl2">default
|
+
{
<div id="box">
+
  state_entry()
 +
  {
 +
    float num1 = llFrand(100.0);
 +
    float num2 = llFrand(100.0);
  
== Specification ==
+
    llOwnerSay("y = " + (string)num1);
<div style="padding: 0.5em">
+
    llOwnerSay("x = " + (string)num2);
Returns the arctangent2 of y, x.
+
  
Similar to the arctangent except it utilizes the signs of x & y to specify the quadrant.
+
    llOwnerSay("The arctangent of y divided by x is " + (string)llAtan2(num1, num2));
{|
+
  }
|-
+
}</source><source lang="lsl2">//Function with input of a vector determining the position of a target and returning
| [[LSL_Energy|Energy]]:
+
//a string with the literal compass-direction of that target towards your position
| 10.0
+
//by Ramana Sweetwater 2009/01, any use allowed license :-)
|-
+
//corrected by Patrick Muggins
| [[LSL_Sleep|Sleep]]:
+
| 0.0
+
|-
+
| [[LSL_Function_ID|Function ID]]:
+
| 3
+
|}
+
</div>
+
</div>
+
|-
+
|
+
<div id="box">
+
  
== Caveats ==
+
string compass (vector target)
<div style="padding: 0.5em">
+
{
</div>
+
    vector source = llGetPos();
</div>
+
    list DIRS =["W","NW","N","NE","E","SE","S","SW","W"];
 
+
    integer index = llCeil(3.5 - (4 * llAtan2(target.y - source.y, target.x - source.x) / PI));
|-
+
    return llList2String(DIRS, index);
|
+
}</source>
<div id="box">
+
[[/Compass QA]]
== Examples ==
+
|helpers
<div style="padding: 0.5em">
+
|also_functions=
<lsl>
+
{{LSL DefineRow|[[llSin]]|[[llAsin]]|sine & inverse Sine}}
</lsl>
+
{{LSL DefineRow|[[llCos]]|[[llAcos]]|cosine & inverse cosine}}
</div>
+
{{LSL DefineRow|[[llTan]]||tangent}}
</div>
+
|also_articles=
|-
+
{{LSL DefineRow||{{wikipedia|Atan2}}|}}
|
+
{{LSL DefineRow||{{wikipedia|Inverse trigonometric function}}|}}
<div id="box">
+
|notes
== Helper Functions ==
+
|haiku=
<div style="padding: 0.5em">
+
{{Haiku|An analog clock|passes through infinity|twice every single hour}}
<lsl>
+
|cat1=Math/Trigonometry
</lsl>
+
|cat2
</div>
+
|cat3
</div>
+
|cat4
|-
+
}}
|
+
<div id="box">
+
== See Also ==
+
<div style="padding: 0.5em">
+
[http://en.wikipedia.org/wiki/Atan2]
+
</div>
+
</div>
+
|-
+
|
+
<div id="box">
+
== Notes ==
+
<div style="padding: 0.5em">
+
</div>
+
</div>
+
|}
+
 
+
[[Category:LSL_Functions]]
+
[[Category:LSL_Math]]
+

Latest revision as of 07:32, 15 June 2016

Summary

Function: float llAtan2( float y, float x );

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

• float y
• float x

Similar to the arctangent(y/x) except it utilizes the signs of x & y to determine the quadrant and avoids division by zero.

Specification

If x is positive zero and...

  • y is zero, zero is returned.
  • y is positive, PI/2 is returned.
  • y is negative, -PI/2 is returned.

If x is negative zero and...

  • y is positive zero, PI is returned.
  • y is negative zero, -PI is returned.
  • y is positive, PI/2 is returned.
  • y is negative, -PI/2 is returned.

Or

if((string)x != (string)0.0 && y == 0.0)//negative zero
    return PI * ~-2*((string)y != (string)0.0));
return ((y > 0) - (y < 0)) * PI_BY_TWO;

The returned value is in the range [-PI, PI][1].

Examples

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));
  }
}
//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 :-) //corrected by Patrick Muggins   string compass (vector target) {

   vector source = llGetPos();
   list DIRS =["W","NW","N","NE","E","SE","S","SW","W"];
   integer index = llCeil(3.5 - (4 * llAtan2(target.y - source.y, target.x - source.x) / PI));
   return llList2String(DIRS, index);
}
/Compass QA

See Also

Functions

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

Articles

•  Wikipedia:Atan2
•  Wikipedia:Inverse trigonometric function

Deep Notes

Search JIRA for related Issues

Footnotes

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

Signature

function float llAtan2( float y, float x );

Haiku

An analog clock
passes through infinity
twice every single hour