Forums

Help login failed by Plash on Thursday, 26.April 2012 18:22
Second Life connection impossible by Doggy on Thursday, 26.April 2012 17:25
Breedable pets et animals Second Life by aden on Saturday, 31.March 2012 19:13
Shapes Mesh by born Resident on Monday, 20.February 2012 11:20
Tuto Puppeteer by Josiane on Wednesday, 01.February 2012 13:34
Transparence de la tenue by hani amaterasu on Friday, 27.January 2012 22:50
Ajouter des faces, où des arêtes by brucie on Thursday, 26.January 2012 16:02

Qui est online

We have 542 guests and 1 member online

Publicité SL

Second Life avatars 3d>>

Social



Température (sans et avec arrondi)
User Rating: / 0
PoorBest 
Librairie Scripts
Written by Garmin K   
Calcul (très complexe) de la température en 1 point de la grille, compte tenu de l'heure et de l'altitude.

 

// 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;
}

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 = " + (string) $TemperatureCeltius() + " Degrés Celsius");
    }
}

 

 


Créer un cube, y placer le script, cliquer pour avoir la température dans le chat.

Mais cette température ressemble à quelque chose comme ; 23.897859 Degrés Celsius ; ce n'est pas très esthétique. Une température climatique se donne avec un chiffre après la virgule ; il serait simple de faire une troncature, mais nous allons plutôt utiliser une routine d'arrondi "à la Excel"!


 

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

 

 


Vous voilà un fervent météorologue de Second Life!

 

 

Add comment

Si vous ne voyez pas vos messages c est que vous n êtes pas enregistré sur Avatars-3d en tant que membre. Ils seront examinés par un administrateur avant d être publié! Si vous désirez publier rapidement vos messages enregistrez vous ici

Security code
Refresh