// Ce script donne la température ambiante
//cette fonction délivre, lorsque l'objet qui contient le script //est cliqué, la température environnante
// Fonction utilisateur transportable dans un autre script float $TemperatureCeltius() //float = le résultat des calculs effectués dans //cette fonction sera en virgule flottante { //Variables uniquement valables pour cette fonction float fTemperatureF; vector vSunDir; vector vPos = llGetPos(); float fBase; float fPascal; float fSealevel = llWater(ZERO_VECTOR); //Cette variable est initialisée avec le niveau //de la mer à l'endroit où se trouve l'objet
vSunDir = llGetSunDirection(); vPos = llGetPos(); // Ce qui suit est un bon exemple d'utilisation d'une formule mathématique fTemperatureF = (((((fSealevel + ((100.0 - vPos.z) * 0.018181818) + 30.0) * (2 * llPow(10.0, 22.0))) / (1.8311 * llPow(10.0, 20.0)) / 8.314472) / 19.85553747) + (vSunDir.z * 9)); // fTemperatureF est en degrès Farenheit // la formule suivante convertit les degrés Farenheit en degrès Celtius return (fTemperatureF - 32) * 5/9; }
//Fonction utilisateur pour faire un arrondi à la façon d'Excel //Sert principalement à faire un affichage correct des nombres décimaux //appel de la fonction : //llSay("La quantité est de " + gkRound(flt, rnd) + " moles."); //flt = le nombre flottant à arrondir //rnd = un indicateur : rnd < 0 : nombre de décimales à garder // rnd = 0 : arrondir à l'entier // rnd > 0 : arrondir à la dizaine, centaine, au millier etc //Cette fonction peut donner des résultats incohérents dans certains cas //mais rien à voir avec le cas de la tempérture string gkRound(float flt, integer rnd) { string sArr = (string) flt; list lArr = llParseString2List(sArr,["."],[]); if(rnd == 0) { sArr = llList2String(lArr, 0); if((integer) llGetSubString(llList2String(lArr, 1), 0, 0) >= 5) { sArr = (string) ((integer) sArr + 1); } } else if(rnd < 0) { rnd = llAbs(rnd); integer iArr = (integer) llList2String(lArr, 0); string sDec = llList2String(lArr, 1); integer iDec = 0; if(rnd < llStringLength(sDec)) { integer iRnd = (integer) llGetSubString(sDec, rnd, rnd); iDec = (integer) llGetSubString(sDec, 0, rnd - 1); if(iRnd >= 5) { iDec = iDec + 1; float fRnd = (float) rnd; if(iDec == (integer) llPow(10.0, fRnd)) { iDec = 0; iArr = iArr + 1; } } } sArr = (string) iArr + "." + (string) iDec; } else { string sFix = llList2String(lArr, 0); if(rnd >= llStringLength(sFix)) { sArr = "0"; } else { string sArr = llGetSubString(sFix, 0, llStringLength(sFix) - rnd-1); integer iRnd = (integer) llGetSubString(sFix, llStringLength(sFix) - rnd, llStringLength(sFix) - rnd); if(iRnd >= 5) { sArr = (string) ((integer) sArr + 1); } sArr = (string) ((integer) ((integer) sArr * llPow(10, rnd))); } } return sArr; }
default { state_entry() { // llOwnerSay : permet de placer un message sur le chat // mais lisible uniquement par le propriétaire du script llOwnerSay("Touchez-moi pour avoir la temperature"); }
touch_start(integer total_number) { llOwnerSay("Temperature = " + gkRound($TemperatureCeltius(), -1) + " degrés Celsius"); } }
|