Difference between revisions of "LlVecDist"

From Second Life Wiki
Jump to: navigation, search
m (Replaced old <LSL> block with <source lang="lsl2">)
 
(19 intermediate revisions by 11 users not shown)
Line 1: Line 1:
{{lowercase|llVecDist}}
+
{{LSL_Function
__NOTOC__
+
|func=llVecDist|sort=VecDist
 
+
|func_id=14|func_sleep=0.0|func_energy=10.0
{| width="100%"
+
|func_footnote
|-
+
|p1_type=vector|p1_name=vec_a|p1_desc=Any valid vector
|<div id="box">
+
|p2_type=vector|p2_name=vec_b|p2_desc=Any valid vector
== [[LSL_Type_float|float]] llVecDist( [[LSL_Type_vector|vector]] vec_1, [[LSL_Type_vector|vector]] vec_2); ==
+
|return_type=float
<div style="padding: 0.5em">
+
|return_text=that is the undirected nonnegative distance between {{LSLP|vec_a}} and {{LSLP|vec_b}}.
* vec_1 - Any valid vector value
+
|spec
* vec_2 - Any valid vector value
+
|caveats
</div>
+
|constants
</div>
+
|examples=
|-
+
<source lang="lsl2">
|
+
<div id="box">
+
 
+
== Specification ==
+
<div style="padding: 0.5em">
+
Returns the 3D distance between vec_1 and vec_2
+
{|  
+
|-
+
| [[LSL_Energy|Energy]]:
+
| 10.0
+
|-
+
| [[LSL_Sleep|Sleep]]:
+
| 0.0
+
|-
+
| [[LSL_Function_ID|Function ID]]:
+
| 14
+
|}
+
</div>
+
</div>
+
|-
+
|
+
<div id="box">
+
 
+
== Caveats ==
+
<div style="padding: 0.5em">
+
</div>
+
</div>
+
 
+
|-
+
|
+
<div id="box">
+
== Examples ==
+
<div style="padding: 0.5em">
+
<lsl>
+
 
default {
 
default {
 
     state_entry()
 
     state_entry()
 
     {
 
     {
 
         vector input_1 = <1.0,2.0,3.0>;
 
         vector input_1 = <1.0,2.0,3.0>;
         vector input_2 = <1.0,2.0,3.0>;
+
         vector input_2 = <3.0,2.0,1.0>;
         llSay(0,"The normalize of " + (string)input + " is: "+(string)llVecDist(input_1, input_2) );
+
         llOwnerSay("The distance between " + (string) input_1 +
 +
            " and " + (string) input_2 + " is: "+(string)llVecDist(input_1, input_2) );
 
     }
 
     }
 
}
 
}
</lsl>
+
</source>
</div>
+
<source lang="lsl2">
</div>
+
//To reset script on touch if the object has been rotated since the last script reset
|-
+
float gTolerance = 0.05;  //This corresponds to about a 3 degree rotation
|
+
default
<div id="box">
+
{
== Helper Functions ==
+
state_entry()
<div style="padding: 0.5em">
+
{
<lsl>
+
llSetObjectDesc((string)llRot2Euler(llGetRot()));
</lsl>
+
}
</div>
+
</div>
+
touch_start(integer total_number)
|-
+
{
|
+
if (llVecDist(llRot2Euler(llGetRot()), (vector)llGetObjectDesc()) > gTolerance)
<div id="box">
+
{
== See Also ==
+
llSay(0,"This object has rotated. Automatic reset engaged.");
<div style="padding: 0.5em">
+
llResetScript();
</div>
+
}
</div>
+
}
|-
+
}</source>
|
+
===Video Tutorial===
<div id="box">
+
{{KBvideo|D0WvH58IWEo|640|385|type=youtube}}
== Notes ==
+
|helpers
<div style="padding: 0.5em">
+
|also_functions={{LSL DefineRow||[[llVecMag]]|}}
</div>
+
{{LSL DefineRow||[[llVecNorm]]|}}
</div>
+
|also_events
|}
+
|also_tests
 
+
|also_articles
[[Category:LSL_Functions]]
+
|notes=
[[Category:LSL_Math]]
+
* Mathematically equivalent to:
 +
** [[llVecMag]]( vec_a - vec_b )
 +
** [[llSqrt]]( (vec_b.x - vec_a.x) * (vec_b.x - vec_a.x) + (vec_b.y - vec_a.y) * (vec_b.y - vec_a.y) + (vec_b.z - vec_a.z) * (vec_b.z - vec_a.z) )
 +
* Knowing this, there are ways to circumvent llVecDist for more efficient code.
 +
** For example, vector v3 = (v1-v2); v3*v3 < (f*f); is over twice as fast as llVecDist(v1,v2) < f;
 +
|cat1=Math/3D
 +
|cat2=Vector
 +
|haiku={{Haiku|Squirrel on a wire,|Skips from pole to distant pole.|One leap at a time.}}
 +
|cat3
 +
|cat4
 +
}}

Latest revision as of 12:02, 22 January 2015

Summary

Function: float llVecDist( vector vec_a, vector vec_b );

Returns a float that is the undirected nonnegative distance between vec_a and vec_b.

• vector vec_a Any valid vector
• vector vec_b Any valid vector

Examples

default {
    state_entry()
    {
        vector input_1 = <1.0,2.0,3.0>;
        vector input_2 = <3.0,2.0,1.0>;
        llOwnerSay("The distance between " + (string) input_1 +
            " and " + (string) input_2 + " is: "+(string)llVecDist(input_1, input_2) );
    }
}
//To reset script on touch if the object has been rotated since the last script reset
float gTolerance = 0.05;  //This corresponds to about a 3 degree rotation
default
{
	state_entry()
	{
		llSetObjectDesc((string)llRot2Euler(llGetRot()));
	}
 
	touch_start(integer total_number)
	{
		if (llVecDist(llRot2Euler(llGetRot()), (vector)llGetObjectDesc()) > gTolerance)
		{
			llSay(0,"This object has rotated. Automatic reset engaged.");
			llResetScript();
		}
	}
}

Video Tutorial

Notes

  • Mathematically equivalent to:
    • llVecMag( vec_a - vec_b )
    • llSqrt( (vec_b.x - vec_a.x) * (vec_b.x - vec_a.x) + (vec_b.y - vec_a.y) * (vec_b.y - vec_a.y) + (vec_b.z - vec_a.z) * (vec_b.z - vec_a.z) )
  • Knowing this, there are ways to circumvent llVecDist for more efficient code.
    • For example, vector v3 = (v1-v2); v3*v3 < (f*f); is over twice as fast as llVecDist(v1,v2) < f;

See Also

Functions

•  llVecMag
•  llVecNorm

Deep Notes

Search JIRA for related Issues

Signature

function float llVecDist( vector vec_a, vector vec_b );

Haiku

Squirrel on a wire,
Skips from pole to distant pole.
One leap at a time.