Compteur de vent SL

Répondre
Partager Rechercher
En fait calculer le roulis c'est pas si simple, en se contentant de prendre la rotation x globale on a tout faux quand ça tourne dans tous les sens...

Il faut prendre comme référence un vecteur et calculer l'angle avec sa projection sur le plan horizontal.

En gros un truc comme ça :

default
{
state_entry()
{
llSetTimerEvent(1.0);
}

timer()
{
vector v_y = <.0, 1.0, .0> * llGetRot();
vector v_y_h = llVecNorm(<v_y.x, v_y.y, 0>);
rotation r_diff = llRotBetween(v_y_h, v_y);
float a = llRot2Angle(r_diff) * RAD_TO_DEG;
llSetText("Roulis: " + (string)llRound(a) + "°", <1.0, 1.0, 1.0>, 1.0);
}
}

Vraiment tout pourri ce forum où on peut même plus avoir du code bien présenté .
Exact pour le roulis, j' ai fait ça un peu vite hier soir en testant rapidos "à plat"....ta version contient une petite faute de frappe en :vector v_y = <.0, 1.0, .0> * llGetRot();....au lieu de <1.0,0.0,0.0>.....il serait sympa après de pouvoir afficher un horizon artif. sur l' ecran en appliquant une rotation inverse à une prim fille
Citation :
Publié par MenthalOH
Exact pour le roulis, j' ai fait ça un peu vite hier soir en testant rapidos "à plat"....ta version contient une petite faute de frappe en :vector v_y = <.0, 1.0, .0> * llGetRot();....au lieu de <1.0,0.0,0.0>.....il serait sympa après de pouvoir afficher un horizon artif. sur l' ecran en appliquant une rotation inverse à une prim fille
Euh... non c'est pas une faute de frappe, il faut bien un vecteur sur l'axe Y justement pour pouvoir mesurer le roulis qui est une rotation sur l'axe X.

220px-Aileron_roll.gif


C'est sûr qu'une animation serait sympa, j'avais fait une boussole un peu sur ce principe.

Dernière modification par bestmomo ; 27/01/2017 à 10h31.
hellow...j' ai légèrement modifié un script que j' avais, essaye ça...(petite remarque au passage, le 0 ne correspond pas au nord dans un sim mais à l' Est )



default
{
state_entry()
{
llSetTimerEvent(0.0);
llOwnerSay("Compas OFF");
llSetText("Compas OFF", <1.0,0.0,0.0>, 1.0);
}

touch_end(integer total_number)
{
state marche;
}
}


state marche
{

state_entry()
{
llOwnerSay("Compas ON");
llSetTimerEvent(0.5);
}

touch_end(integer total_number)
{
state default;
}

timer()
{
string direction;
string echelle_angle;

vector vel = llRot2Fwd(llGetRot());
integer x = llRound(vel.x);
integer y = llRound(vel.y);
if((llAbs(x) > llAbs(y)) && (x > 0))
{
direction="EST";
echelle_angle ="--67.5--90.0--112.5--";
}
else if((llAbs(x) > llAbs(y)) && (x < 0))
{

direction = "OUEST";
echelle_angle ="--247.5--270.0--292.5--";
}
else if((llAbs(y) > llAbs(x)) && (y > 0))
{

direction = "NORD";
echelle_angle ="--337.5--0.0--22.5--";
}
else if((llAbs(y) > llAbs(x)) && (y < 0))
{

direction = "SUD";
echelle_angle ="--157.5--180.0--202.5--";
}
else if((llAbs(y) == llAbs(x)) && (x > 0 && y > 0))
{

direction = "N - EST";
echelle_angle ="--67.5--90.0--112.5--";
}
else if((llAbs(y) == llAbs(x)) && (x < 0 && y > 0))
{

direction = "N - OUEST";
echelle_angle ="--292.5--315.0--337.5--";
}
else if((llAbs(y) == llAbs(x)) && (x < 0 && y < 0))
{

direction = "S - OUEST";
echelle_angle ="--202.5--225.0--247.5--";
}
else if((llAbs(y) == llAbs(x)) && (x > 0 && y < 0))
{

direction = "S - EST";
echelle_angle ="--112.5--135.0--157.5--";
}
llSetText(direction+"\n"+ echelle_angle, <0.0,1.0,0.0>, 1.0);
}
}
hello, c 'est juste un petit ajout esthetique symbolisant un vrai compas ....le chiffre central et le cap "principal"...0 pour nord, 180 pour sud etc.....les nombres de chaque coté sont les "limites" de la direction.....un cercle en 8 quartiers donne des angles de 45°, donc 22.5° de chaque coté
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés