llVecDist

From Second Life Wiki
Revision as of 14:23, 4 April 2014 by Rolig Loon (talk | contribs)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

<lsl> 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) );
   }

} </lsl> <lsl> //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(); } } }</lsl>

Video Tutorial

<videoflash type="youtube">D0WvH58IWEo|640|385</videoflash>

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.