Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Vecteurs et position/direction

Par eMRaistlin le 4/12/2002 à 12:51:35 (#2708554)

Voila : mes cours de maths sont bien loin (tres tres loin, même...) et j'ai comme un doute. et comme d'habitude : dans le doute je m'abstient.

Donc je suis bloqué :

Comment puis-je calculer des coordonnées en fonction d'un point de depart (X,Y et facing) + une distance, afin d'avoir un point en (X+k, Y+l et le même facing)


Merchi ^^

(de memoire, faut y aller au cosinus et a la tangeante, mais j'chui plus sur...)

/me a honte...

Par Iridian le 4/12/2002 à 13:38:59 (#2708931)

Ba deja faudrai pouvoir calculer l'angle entre le vecteur et l'un des axes d'origines.
Je suppose qu'on peu obtenir cette valeure avec le facing (mais je ne sais pas que represente "vraiment" le facing)

Avec cet angle et la longueur (le vecteur est en fait la tangente) du devrai pouvoir calculer la longueur des 2 autres cotés du triangle qui representent les coordonnées sur : l'un l'axe des x et l'autre des y.

Si quelqu'un connais l'utilisation et la valeur retournée par facing, j'essaierai de faire un exemple complet !

Par eMRaistlin le 4/12/2002 à 13:41:54 (#2708957)

le facing retourne un float compris entre 1.0 et 360.0, de memoire, qui correspond a un angle par rapport a l'axe des Y (enfin, je crois, a verifier)

Ma piste m'avais emmené vers un truc du genre

Nouvelle coord = (X+Dcos(Facing), Y+Dsin(facing))
avec D = distance souhaitée

mais j'aurais souhaité avoir une confirmation de cela

Par Azrael07 le 4/12/2002 à 13:56:35 (#2709080)

bon la je sors de cours de math, théoriquement je devrais te répondre sans hésiter, mais.................... ben je suis meilleur en prog qu'en math moi ^_^

/me cherche dans ses cours

le prob c'est que les cos du nwn c'est en degré, et que ca fait depuis la troisième que j'ai pas touché au degré, vive les radians.....

bon alors.....

on note x et y les coordonnés de te point de départ, x' et y' les coordonnés de ton point d'arrivé, Â ton angle (ou facing) et d la distance entre (x, y) et (x', y')

on a donc :
x' = arccos( Â ) * d + x
y' = arcsin( Â ) * d + y

voila normalement c juste, j'ai vérifié ^_^

EDIT : oui donc en gros c bien ce que t'as marqué

Par Iridian le 4/12/2002 à 14:03:36 (#2709162)

essayons avec un exemple simple :
point A 0,0, angle 45°, longueur 5.

selon ta formule le point d'arrivé serai :
(0+5*cos(45), 0+5*sin(45))
soit

(5*0.707,5*0.707) = (3.535,3.535) ce qui correpond a ce que dit mon graphe :)
Tu es donc sur la bonne voie

Essayons maintenant avec un angle de 30° par rapport a l'axe y.
(0+5*cos(30),0+5*sin(30)) soit (5*0.866,5*0.5) = (4.33,2.5)
La c'est pas bon ! en fait la formule est bonne si l'angle est par rapport a l'axe des x.

Si tu est sur que facing retourne une valeur par rapport a y, tu utilise l'angle 90-facing et tu appliques ta formules ca devrai etre bon.

Je sais que ce n'est pas une demonstration mathematique, qu'elle n'est ni "exacte" ni "propre", mais elle est (ou du moins parait) logique :ange: (pis mes maths sont trop loin !)

[edit] Mouarf, me suis fait doublé et en plus il semblerai que j'ai 0 pointé ! [edit]
[edit pour Jaha] Bon bas 5/20 alors :) [edit]

Par Jaha Effect le 4/12/2002 à 14:33:30 (#2709449)

Le cercle trigonometrique a sont 0 sur l'axe des X et 90 sur l'axe des Y et tourne dans le sens inverse des aiguilles d'une montre.
Donc tu n'avait pas tord sur ce point Iridian :)

Jaha Effect :D

Par eMRaistlin le 4/12/2002 à 15:30:17 (#2709928)

Cela veut il dire que je doit faire :

x+dCos(90-Â), y+dSin(90-Â)

ou bien que je peut faire x+dSin(Â), y+dCos(Â)



(desolé, je sais que je davrait verifier tt seul avec ma calculette... mais j'ai pas ca au bureau...)

Par Azrael07 le 4/12/2002 à 15:48:46 (#2710085)

ben j'ai pas vraiment suivis la suite du post, mais ce que j'ai marqué est juste, ca quand meme faudrais ke je m'inquiète pour mon bac si c pas le cas ^_^

EDIT : tout le problème vient du simplement du fait qu'on travaille en degrés, et les degrés c'est un peu pourris sur les bords. Bon moi je pense que mon truc est juste, mais alors si tout le monde est pas daccord, peut etre pas...

Par Iridian le 4/12/2002 à 15:49:38 (#2710095)

ba a priori 90-Â, mais sa depend de la fonction facing ... (puisque tu n'etais pas sur de la reference a y ou a x)

Par RAT le 4/12/2002 à 19:37:45 (#2711877)

Provient du message de Azrael07
ben j'ai pas vraiment suivis la suite du post, mais ce que j'ai marqué est juste, ca quand meme faudrais ke je m'inquiète pour mon bac si c pas le cas ^_^

EDIT : tout le problème vient du simplement du fait qu'on travaille en degrés, et les degrés c'est un peu pourris sur les bords. Bon moi je pense que mon truc est juste, mais alors si tout le monde est pas daccord, peut etre pas...



D'apres mes souvenirs, je pense que ta formule devrait marcher normalement.

Mais tu veux faire quoi eMRaistlin pour te prendre la tête comme cela????

Par Tynril le 4/12/2002 à 20:35:22 (#2712259)

Nan, c'est une sombre histoire de concurence qui m'a sauté aux yeux à coup de batte quand un autre scripteur d'Althea me l'a fait remarqué... J'trouve ça bête mais bon. C'est la vie...

Par Azrael07 le 4/12/2002 à 21:35:25 (#2712650)

ben alors Tynril, il est passé ou le message ou t'avais raconté n'importnaouak ????

Z'AVEZ VU CA, TYNRIL A RACONTE N'IMPORTE KOI IL VEUT PAS LE MONTRER

looooooool

Par coolstar le 4/12/2002 à 21:40:30 (#2712680)

:rolleyes:

Par eMRaistlin le 4/12/2002 à 21:49:39 (#2712724)

Euh... je fini tout, et promis, je fais un post dessus si j'arrive faire ce que je veux ^^


(et si j'y arrive pas, je mettrait mes sources, et vous pourrez m'aider)

Par Jedaï le 4/12/2002 à 22:36:07 (#2713087)

Bon je confirme, la formule générale est bien, si l'angle est par rapport à x et dans le sens direct (on suppose) :
coordonnées du point d'arrivée : (x + d * cos (â) , y + d * sin (â) ).

J'ai vérifié :)
Mais pour obtenir â si le facing est par rapport à l'axe des ordonnées, je pense que la formule est plutôt :
â = AngleFacing + 90°

En tous cas ça marche, j'ai vérifié aussi... alors que 90° - Facing marchait pas...

Tu n'as donc plus qu'à essayer :
(x + d * cos (nFacing + 90) , y + d * sin (nFacing + 90) )

Je suis presque sûr que ça marche (si le facing est bien par rapport au y, sinon reprend la première formule).:cool:

Par Jaha Effect le 4/12/2002 à 22:44:36 (#2713161)

Le 0° est définitivement sur l'axe des X donc la première formule est bonne :)

Jaha Effect :Dhttp://pageperso.aol.fr/JAHA%20KADI/cercle+trigo.jpg

Jaha Effect :D

Par eMRaistlin le 4/12/2002 à 22:52:16 (#2713218)

thx, les gars... je vous tient au courant ^^

Par RAT le 5/12/2002 à 0:33:52 (#2713737)

Tynril c'est quoi cette fameuse concurrence la???cette sombre histoire???

Que voulez vous déplacer lol??

Dites moi sur quoi vous travaillez, je pourrai vraiment vous aider mais là comme cela je ne vois pas trop.

Par Taern le 5/12/2002 à 16:59:06 (#2717910)

Comme quoi, ça peut servir les maths :rolleyes:

Bon pour clarifier un peu les choses, parceque là vous parlez d'angles alors qu'il n'y a pas lieu de le faire (si j'ai bien compris ton problème eMRaistlin, et encore je l'ai relu 3 fois :monstre: ) :

dans NWN un vecteur est composé de 3 composantes à virgule flottante (float), qui désignent : coordonnée en X, coordonnée en Y, coordonnée en Z. Pas d'histoire de facing jusque là.

tu as ton point A (xa, ya, za), et tu veux calculer les coordonnées du point B(xb, yb, zb) en fonction de celles de A. Plusieurs moyens :

*tu réfléchis en terme de translation par rapport à un axe. Exemple : "je veux que mon point B soit éloigné de 2.0 de A par rapport à l'axe X, et éloigné de 3.0 de A par rapport à l'axe Y." Tu obtiens :
xb = xa + 2.0
yb = ya + 3.0
zb = za

*tu réfléchis en terme de distance et d'angle. Exemple : "je veux que mon point B soit à une distance 3.0 de A, et que la droite (AB) fasse un angle de 60° avec l'axe de référence." Pour info il me semble que l'axe de référence de NWN (qui correspondrait à l'axe X en maths) est l'axe qui "va" vers l'ouest. Le sens de rotation reste anti-horaire donc ça donne : 0°=Ouest, 90°=Sud etc. A vérifier qd même ;)

Alors tu obtiendra :
xb = 3.0*cos(60.0) + xa
yb = 3.0*sin(60.0) + ya
zb = za

Si tu veux utiliser l'axe des Z, ce qui en passant peut être très intéressant, ça se complique un chouïa mais on reste dans le même principe :cool:
Et oublie les tangentes ;) c'est bon qu'a te balancer des divisions par 0 ces trucs-là :)

Pour le facing c'est à part puisque tu dois utiliser les commande SetFacing et GetFacing.

Voilou j'espère avoir aidé :)

Par eMRaistlin le 5/12/2002 à 17:09:00 (#2717986)

Parfait parfait ... merci ^^

Pour info, il y a une fonction AngleToVector qui est rudement pratique...

(voir post sur le foot)
Je la conseille a tous
;)

JOL Archives 1.0.1
@ JOL / JeuxOnLine