mouvement rectiligne - yaw, pitch - Algo - Programmation
Marsh Posté le 25-08-2010 à 09:51:18
Si c'est pour voir s'ils sont alignés, les 2 techniques marchent. Par contre je pense que celle de contrôler si les 3 points sont alignés est un chouillat plus rapide, car n'utilisant pas de fonctions trigo.
Marsh Posté le 25-08-2010 à 10:24:26
Merci de ta réponse
Donc je dois considérer que A, B et C ont comme abscisse yaw, et comme ordonnée pitch, et qu'ils sont alignés dans un repère orthogonal ?
Marsh Posté le 25-08-2010 à 11:31:43
Non non non. Tes Yaw et Pitch décrivent la position d'un solide par rapport à un système de coordonnées (comme le dit la première phrase). ça ne te dit rien sur le centre de masse du solide en question (donc sur sa position X,Y,Z).
Si 2 "instances" du même solide ont les mêmes Yaw et Pitch, tout ce que tu peux en conclure c'est que les 2 instances sont orientées de la même manière, ça ne te dit rien par rapport à leur position X, Y et Z.
Marsh Posté le 25-08-2010 à 22:03:33
on est d'accord je sais que ça n'a rien à voir avec la position mais avec la direction. Mais je veux savoir si le changement de direction est réctiligne :
Par exemple on a un objet O (dont on se fout complètement de la position).
Cet objet à une direction d1(yaw, pitch).
Puis il prend une direction d2, puis d3.
J'aimerais savoir si le mouvement ayant entrainé ces changements de direction est rectiligne, sans tenir compte de la position X, Y et Z; mais pourquoi pas, plus tard, prendre cet élément en compte. mais je n'en suis pas là
Donc ma question : est-ce qu'il suffit alors de vérifier que des points d1, d2 et d3 (avec x = yaw et y = pitch) seraient alignés dans un repère ?
Marsh Posté le 26-08-2010 à 10:46:58
D'accord tu veux donc savoir si les 3 vecteurs sont colinéaires, c'est ça?
Marsh Posté le 26-08-2010 à 14:07:36
Soit c'est moi qui comprend vraiment rien, soit la réponse est forcément non, à moins que les yaw et pitch soient toujours nuls, non?
J'veux dire, si t'as un vecteur direction donné, et que tu lui appliques une rotation (ce qui est la transformations ici considérée), le vecteur obtenu n'est colinéaire que si la rotation est faite sur un multiple de pi.
Ou alors encore une fois, j'ai juste pas compris ce que ut veux faire (et dans ce cas là, peut-être qu'un dessin ne serait pas de trop )
Marsh Posté le 02-09-2010 à 10:31:26
Re
Désolé pour le temps que je mets à répondre, et merci encore à toi
Alors je pense que je m'oriente vers une mauvaise solution.
Donc je vais tout t'expliquer
Il s'agit d'un FPS dont j'ai accès aux sources (pas de soucis).
Le joueur à une position x y z contenue dans un vecteur. Il a une direction yaw & pitch.
L'objectif : savoir si son mouvement est rectiligne. Pourquoi ? pour différencier un mouvement humain d'un bot (qui vise tout seul, mais qui produit des mouvements rectilignes).
Donc, en prenant 3 positions différentes (vec(x, y, z), et 3 directions différentes (yaw + pitch) à 3 instants différents (t1, t2 et t3) y a-t-il un moyen de vérifier si le mouvement est bien rectiligne ? (je parle toujours du la direction du viseur, pas du déplacement du joueur ).
Merci !
Marsh Posté le 02-09-2010 à 14:59:37
Comme disais mon prof de maths, rien ne vaut un petit crobard (sauf qu'il le disait en allemand)
Si j'ai bien compris, ton problème c'est de savoir si on est dans le cas vert (bot) ou bleu (humain) ?
Dans ce cas là j'aurais tendance à dire naïvement qu'il suffit de vérifier si
( pitch(B)-pitch(A) ) / ( pitch(C)-pitch(A) ) = ( yaw(B)-yaw(A) ) / ( yaw(C)-yaw(A) )
Si le personnage est immobile pas en tout cas.
Marsh Posté le 02-09-2010 à 15:17:29
Dans tous les cas c'est un joueur unique derrière, le but est de savoir s'il utilise un bot qui vise tout seul (donc avec des mouvements calculés de façon mathématique.).
Merci, je teste ta solution et je vous tiens au courant.
Marsh Posté le 02-09-2010 à 17:07:01
Le yaw/pitch ne te donne rien, puisque le bot/joueur peut slider/sauter... (dumoins faire une translation non liée à l'orientation de l'avatar).
Et des joueurs humains qui ont une trajectoire rectiligne, ça existe (surtout sur console ).
Tu veux faire quoi, choper les cheaters ?
Marsh Posté le 02-09-2010 à 17:45:09
bjone a écrit : Et des joueurs humains qui ont une trajectoire rectiligne, ça existe (surtout sur console ). |
sur certaines distances, pas possible dans notre cas mais le but est d'adapter tous les paramètres possibles pour éviter les faux positifs
bjone a écrit : |
J'essaie d'abord en local avec moi et des bots et j'observe les différences. Les méthodes précédentes (dont celle que je viens d'essayer) n'ont rien donné.
Marsh Posté le 02-09-2010 à 18:34:12
Pour moi pour gauler les bots et les cheaters:
Tu crées un histogramme qui te donne la distribution du temps passé dans une atitude donnée:
Pour l'orientation avec le yaw/pitch, tu as un vecteur.
Tu prends un top et une orientation de référence, et tant que l'avatar est colinéaire (un dot de vecteurs entre l'orientation courante et la référence), tu continue à compter le temps.
Lorsque l'écart est trop important (>1°), tu prends le temps écoulé et tu rajoutes une occurence dans l'histogramme dans l'entrée correspondant à ce temps. (genre un histo de uint qui va de 10 ms à 4secs par pas de 10ms)
Ensuite tu reprends la nouvelle orientation comme référence et tu te remets à compter.
La même chose avec le vecteur de déplacement normalisé, en faisant le différentiel de position entre deux frames, par rapport à un vecteur de référence.
Déjà avec ça tu peux voir une diff stat entre un bot et un humain.
Un naab ou un bot aura un histogramme à droite, un mec nerveux qui contrôle tous ses angles aura un histogramme à gauche.
Pour les cheaters, c'est les temps de réaction qu'il faudrait plustôt prendre en compte.
Donc genre pour chaque joueur, voir comment il réagit lorsque un autre joueur rentre dans son frustum, et deviens géométriquement visible, et avec quelle vitesse et quelle "stabilité" il vise.
Donc genre un histogramme qui donne le temps de réaction (changement d'atitude) lorsque un joueur est dans le frustum mais caché, combien de temps il ne vise pas un joueur caché dans son frustum, combien de temps il ne se dirige pas vers ledit joueur, combien de temps il se dirige, combien de temps il est à 5° du (ou d'un) joueur caché.
Pareil pour un histogramme pour le joueur visible. (l'histo du temps de réaction, l'histo du temps d''établissement de la visée à 5° près )
Tu peux aussi faire un histogramme avec l'angle en abscisse et le temps en ordonnée lorsqu'un mec est visé dans les 10°.
Si l'histo te fais souvent un gros pic en ^ dans les 2°, tu sais qu'il marche pas qu'à l'eau.
Si il te fait un U, t'as un naab qui panique
(Alors peut-être pas en degrée, mais en % du fov, car forcément un sniper pétera plus facilement les scores)
Tu peux aussi faire un histo du comportement par rapport à une cible (je sais pas un truc qui donnerait le temps passé à accompagner une cible soit par le slide, soit à faire un changement d'orientation qui soit toujours dans le bon "sens" pour suivre la cible)
Enfin ce genre de trucs...
Marsh Posté le 24-08-2010 à 23:21:50
Bonjour à tous !
J'aimerais savoir si un mouvement est rectiligne. Je dispose de ces informations :
yawA, pitch A, yawB, pitchB, yawC, pitchC.
Ces informations sont récupérées à 3 moments différent : T+0 => A, T+1 => B, T+2 => C;
A chaque étape (A, B ou C) la direction change. Au final on obtient un mouvement de A passant par B et allant à C.
J'aimerais savoir si le mouvement obtenu est rectiligne.
Le principe : http://en.wikipedia.org/wiki/Yaw,_pitch,_and_roll
D'ailleurs je n'arrive pas bien à comprendre le principe
Cela revient il à vérifier que les 3 points A, B, C sont alignés ou bien il faut utiliser le trigonométrie ?
Note : dans mon cas, je dois ignorer le roll.
Voilà, j'espère que mon post est compréhensible, sinon n'hésitez pas à me le faire remarquer !
Merci d'avance.