Difference between revisions of "LlVecDist"

From Second Life Wiki
Jump to navigation Jump to search
 
m (Updated a link to a video to actually provide the link rather than formatting that is broken.)
 
(21 intermediate revisions by 12 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">
https://www.youtube.com/watch?v=D0WvH58IWEo
== 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 20:41, 22 March 2022

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

https://www.youtube.com/watch?v=D0WvH58IWEo

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.