LlVecDist

From Second Life Wiki

Jump to: navigation, search

Contents

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

This article wasn't helpful for you? Maybe the related article at the LSL Wiki is able to bring enlightenment.
Personal tools
In other languages