GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Ssk le 30 Mai 2009, 21:26:58

Titre: Calcule pour la Rotation + Difference de distance entre objet => joueur
Posté par: Ssk le 30 Mai 2009, 21:26:58
salut all je me fait un script secret bientot dans le showroom mais je n arrive pas a fait un calcule

je veut qu' un objet pointe ( rotation ) sur le joueurs je n' y arrive pas :'( si on peut m aider

La rotation Z ;)


EDIT1:
Je precise bien j' ai l objet:

Float pris au hasard:

x: 1540 , y;-5204, z : 50;

Joueurs

x: 3540 , y;3504, z : 10;


et je veut que l' objet pointe sur le joueur

Sinon juste pour dire que c' est un missile =)

EDIT2:


je veut aussi avoir la diferrence de mettre entre l objet et le joueur mais y a des erreur de calcule je pense

voila le code

if((xx[playerid] - xx2[Cible])-(yy[playerid] - yy2[Cible]) < 0)
{
format(str,128,"Missile à %f Metres de vous",((xx[playerid] - xx2[Cible])-(yy[playerid] - yy2[Cible]))*((xx[playerid] - xx2[Cible])-(yy[playerid] - yy2[Cible]))/100);
}
else
{
format(str,128,"Missile à %f Metres de vous",(xx[playerid] - xx2[Cible])-(yy[playerid] - yy2[Cible]));
}
SendClientMessage(Cible,0x00F600F6,str);
Titre: Re : Calcule pour la Rotation + Difference de distance entre objet => joueur
Posté par: S!m le 31 Mai 2009, 16:20:09
Salut,

ton code est un très bon début,
néanmoins les distances se calculent à l'aide d'une racine carrée (qui équivaut à un exposant 0.5), donc on obtient la formule ci-dessous :

distance totale = (((distance X)^2 + (distance Y)^2 + (distance Z)^2)^0.5)note: le caractère ^ correspond ici à l'exposant de ... en code cet opérateur n'effectue pas la même opération...

pour ton angle tu devras utiliser cette technique, tu as sans doute déjà vu le cercle trigonométrique?

(http://melusine.eu.org/lab/servpng/bjps/datas/banque/trigo/trigo_01.png)

Il te faut donc trouver une technique pour trouver le bon angle avec les fonctions asin, acos et atan, bonne chance :P

Si tu n'y arrive pas, n'hésite pas à poster

++Sim++
Titre: Re : Calcule pour la Rotation + Difference de distance entre objet => joueur
Posté par: Ssk le 31 Mai 2009, 19:07:32
merci Sim grace toi sur msn et ici j ai reussi pour la distance et ensuite pour la rotation je cherche encore =)
Titre: Re : Calcule pour la Rotation + Difference de distance entre objet => joueur
Posté par: Ssk le 01 Juin 2009, 20:21:13
Voila ce que j ai compris pour la distance dite moi si c' est bon ( Attention 100 % paint la fleme au photoshop lol)


dite  moi si c 'est faux lol


sinon comment calculer la racine carre car sqrt existe pas en pawn contrairement au c -_-"


Sinon voila la fonction que j ai creer
forward Distance(playerid,id,msg);
public Distance(playerid,id,msg)
{
new Float:Pos1[3],Float:Pos2[3],Float:x,Float:y,Float:Pytha,string[32];
GetPlayerPos(playerid,Pos1[0],Pos1[1],Pos1[2]);
GetPlayerPos(id,Pos2[0],Pos2[1],Pos2[2]);
if(Pos1[0] > Pos2[0]){
  x = Pos1[0] - Pos2[0];}
  else if(Pos1[0] < Pos2[0]){
  x = Pos2[0] - Pos1[0];}
if(Pos1[1] > Pos2[1]){
  y = Pos1[1] - Pos2[1];}
  else if(Pos1[1] < Pos2[1]){
  y = Pos2[1] - Pos1[1];}

if(x > y)
{
   Pytha = (x*x)-(y*y);
}
else if(x < y)
{
   Pytha = ((y*y)-(x*x))/100;
}
floatsqroot(Pytha);
format(string,sizeof(string),"%.f",Pytha);
return SendClientMessage(msg,0x00F600F6,string);
}

Voila =)

Distance(1 personne , 2 personne ,Personne qui recoit le message );
Titre: Re : Calcule pour la Rotation + Difference de distance entre objet => joueur
Posté par: S!m le 01 Juin 2009, 21:38:48
Salut,

ta compréhension de Pythagore est bonne, elle s'applique même aux système à trois dimensions...sauf qu'à ce moment on parlerais plutôt de modules de vecteurs

en passant, tu t'assure que chacune des expressions au carrées sont positive, en réalité, qu'elles soient positives ou non, une fois au carrée, le signe disparait, ce bout du code peut être éliminer....

je persiste à dire que la technique la plus efficace pour obtenir une distance est celle ci:


#define GetDistance(%0,%1,%2,%3,%4,%5) (floatround(((%0 - %3) * (%0 - %3)) + ((%1 - %4) * (%1 - %4)) + ((%2 - %5) * (%2 - %5))))

Cette "fonction" s'utilise comme ceci: new Float:Distance =  GetDistance(X1, Y1, Z1, X2, Y2, Z2);

EDIT:

PS. Sur ton image tu soustrais les deux valeurs, tu doit les additionner

Si l'on prend ta technique avec Pythagore, tu as par exemple:

A = Distance entre les deux points en X
B = distance entre les deux points en Y
C = distance entre les deux points en Z

Tu commence en calculant la distance dans un seul plan :

A² + B² = D²

donc tu n'as plus que deux distance, celle dans le plan X, Y et celle qui y est perpendiculaire, C
Puisque ces deux distances sont perpendiculaires, on peut y voir un triangle rectangle dont les cathetes sont D et C
On peut donc calculé la distance totale (appelée E ici) à l'aide d'un second Pythagore

D² + C² = E²

après remplacement, on obtient:

A² + B² + C² = E²
(A² + B² + C²) ^0.5 = E

en mots: La distance entre les deux points = racine carrée de (A² + B² + C²)
soit la fonction que j'aie écrite ci-dessus

++Sim++
Titre: Re : Calcule pour la Rotation + Difference de distance entre objet => joueur
Posté par: Ssk le 01 Juin 2009, 21:43:56
Merci pour cette remarque =)

forward Distance(playerid,id,msg);
public Distance(playerid,id,msg)
{
new Float:Pos1[3],Float:Pos2[3],Float:x,Float:y,Float:Pytha,string[32],Float:z;
GetPlayerPos(playerid,Pos1[0],Pos1[1],Pos1[2]);
GetPlayerPos(id,Pos2[0],Pos2[1],Pos2[2]);
  x = Pos1[0] - Pos2[0];
  y = Pos1[1] =- Pos2[1];
Pytha = (x*x)-(y*y);
floatsqroot(Pytha);
if(Pos1[2] > Pos2[2]){
  z = Pos1[2] =- Pos2[2];}
  else{
  z = Pos2[2] =- Pos1[2];}
  Pytha += z;
format(string,sizeof(string),"%.f",Pytha);
return SendClientMessage(msg,0x00F600F6,string);
}

comme ca c' est bon ??j ai ajoute de la position Z
Titre: Re : Calcule pour la Rotation + Difference de distance entre objet => joueur
Posté par: S!m le 01 Juin 2009, 21:51:05
Salut,

tu devrais trouver ta réponse dans ma modification de mon message précédent....

++Sim++
Titre: Re : Calcule pour la Rotation + Difference de distance entre objet => joueur
Posté par: Ssk le 01 Juin 2009, 22:12:17
Ok merci beaucoup maintenant me reste plus qu' a decrouvrir comment faire pour la rotation
Titre: Re : Calcule pour la Rotation + Difference de distance entre objet => joueur
Posté par: rivoal29 le 02 Juin 2009, 21:43:01
J'avait demander pour trouver l'angle entre un point et un autre point d'un cheekpoint ( dont la norme ) tu devrai le trouver en tapant " Angle cheekpoint " truc comme sa
Titre: Re : Calcule pour la Rotation + Difference de distance entre objet => joueur
Posté par: Ssk le 03 Juin 2009, 11:07:08
Ok merci j' irrais voir la je suis avec mon prof de math qui va essayez de m aider!


[HS] je serais absent pendant peut etre une longue periode Dsl les gars =) [/HS]

EDIT:POwaaa il m' as aider j' ai a peu pres compris je doit utiliser la tangente et apres arctangente il m' as ecris sur une feuille  j' essayerais de voir le resultat ce soir =)