Difference between revisions of "Interpolation/Linear/Vectors"

From Second Life Wiki
Jump to: navigation, search
Line 3: Line 3:
 
|func=pLin
 
|func=pLin
 
|p1_type=list|p1_name=v
 
|p1_type=list|p1_name=v
|p2_type=float|p2_name=t|p3_desc=Ranges between [0, 1].
+
|p2_type=float|p2_name=t|p2_desc=Ranges between [0, 1]
 
|p3_type=integer|p3_name=Loop|p3_desc=Whether the list is a curved line or loops into a closed shape.
 
|p3_type=integer|p3_name=Loop|p3_desc=Whether the list is a curved line or loops into a closed shape.
 
|return_type=vector
 
|return_type=vector

Revision as of 12:10, 16 September 2011

Summary

Function: vector pLin( list v, float t, integer Loop );

Linearly interpolates between two vector points in a list of vectors that define a path.
Returns a vector

• list v
• float t Ranges between [0, 1]
• integer Loop Whether the list is a curved line or loops into a closed shape.

Specification

<lsl>vector pLin(list v, float t, integer Loop) {

   integer l = llGetListLength(v); t *= l-1;
   integer f = llFloor(t); t -= f;
   return llList2Vector(v,pIndex(f,l,Loop))*(1-t) + llList2Vector(v,pIndex(f+1,l,Loop))*t;

} integer pIndex( integer Index, integer Length, integer Loop) {

   if(Loop) return Index % Length;
   if(Index < 0) return 0;
   if(Index > --Length) return Length;
   return Index;

} // Released into public domain. By Nexii Malthus.</lsl>

Examples

<lsl></lsl>