気ままな一言
2008年04月01日
LSL汎用関数 その2
数学っぽい関数です
//============================================================================== // 角度(度数法)からrotation型に変換します // degree 角度 // 戻り値 rotation型の回転値を返します。 //============================================================================== rotation deg2rot(vector degree) { return llEuler2Rot(degree * DEG_TO_RAD); } 【使用方法】 rotation rot = deg2rot(<45.0, 0, 0>); // X軸45度
//============================================================================== // rotation型から角度(度数法)に変換します // rot 回転値 // 戻り値 角度をを返します。 //============================================================================== vector rot2deg(rotation rot) { return llRot2Euler(rot) * RAD_TO_DEG; } 【使用方法】 vector vec = rot2deg(<1, 0, 0, 1>); // X軸180度
//============================================================================== // 整数値の乱数を生成します // min 返す値の最小値 // max 返す値の最大値 // 戻り値 minからmaxまでの間の乱数値を返します。 (min <= value <= max) //============================================================================== integer rand(integer min,integer max) { return llFloor(llFrand(max - min + 1)) + min; } 【使用方法】 integer n = rand(3, 5); // 3 <= n <= 5 integer n = rand(-3, 5); // -3 <= n <= 5
//============================================================================== // 最大値を返します // values 比較する値(数値のみ有効) // 戻り値 valuesに含む値から最大値を返します。 //============================================================================== float max(list values) { return llList2Float(llListSort(values, 1, FALSE), 0); } 【使用方法】 float n = max([3, 5, 10, 4, 1]); // n = 10
//============================================================================== // 最小値を返します // values 比較する値(数値のみ有効) // 戻り値 valuesに含む値から最小値を返します。 //============================================================================== float min(list values) { return llList2Float(llListSort(values, 1, TRUE), 0); } 【使用方法】 float n = min([5, 7, 1, 9, 3]); // n = 1
//============================================================================== // 16進数を10進数に変換します。 // 16進文字列以外はすべて無視されます。 // hex 16進文字列 // 戻り値 10進に変換した値を返します。 //============================================================================== float hex2dec(string hex) { integer i = -llStringLength(hex); integer j; float n = 0; hex = llToLower(hex); while (i) { j = llSubStringIndex("0123456789abcdef", llGetSubString(hex, i, i)); i = -(~i); if (j >= 0) { n = (n * 16) + j; } } return n; } 【使用方法】 float value = hex2dec("ff"); // value = 255.0 float value = hex2dec("ffffffffff"); // value = 1099511627776.0
//============================================================================== // 10進数を16進数に変換します。 // number 数値 // 戻り値 16進に変換した文字列を返します。 //============================================================================== string dec2hex(integer number) { integer n; string hex; string top = ""; if (number & 0x80000000) { // number < 0 number = 0x0fffffff & number; top = "f"; } do { hex = llGetSubString("0123456789abcdef", (n = number % 16), n) + hex; } while (number /= 16); return top + hex; } 【使用方法】 string hex = dec2hex(30); // hex = "1e" string hex = dec2hex(-30); // hex = "ffffffe2"
Posted by れむ at 13:54
│Tips