• 05 Juillet 2025, 13:04:29


Auteur Sujet: Calcule pour la Rotation + Difference de distance entre objet => joueur  (Lu 1823 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
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);
« Modifié: 31 Mai 2009, 16:06:20 par sasuke78200 »



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
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?



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++





Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
merci Sim grace toi sur msn et ici j ai reussi pour la distance et ensuite pour la rotation je cherche encore =)



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
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 );
« Modifié: 01 Juin 2009, 21:08:46 par sasuke78200 »



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
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++
« Modifié: 01 Juin 2009, 21:50:16 par Sim »





Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
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



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Salut,

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

++Sim++





Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Ok merci beaucoup maintenant me reste plus qu' a decrouvrir comment faire pour la rotation



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne rivoal29

  • *
  • Bandit
  • Messages: 269
    • Voir le profil
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


Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
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 =)
« Modifié: 03 Juin 2009, 11:12:02 par sasuke78200 »



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog