Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Création d'une équation pour un programme

Posté par
isador
04-08-15 à 14:20

Bonjour a tous amis féru de math, je viens quérir votre aide aujourd'hui.

Pour le jeu que je suis actuellement en train de créer j'ai eu besoin de créer une fonction qui permet de savoir lequel des personnage l'on regarde, pour se faire j'ai utiliser la trigonométrie pour avoir deux valeur, une obtenue en faisant le cosinus de la rotation de la caméra et l'autre en calculant via l'hypoténuse et le coté adjacent.

Cependant un problème se pose, il me faut trouver un moyen qui permet de voir si le cosinus correspond bien avec l'autre résultat, hors je ne peut pas juste regarder si cos == résultat car il est très peu probable qu'ils soit similaire, et puis même si ils l'était, il faudrait viser le centre du personnage ce qui n'est pas pratique.

J'ai alors eu l'idée de créer un coefficient qui permettrai de gérer cette marge d'erreur, pour cela j'ai a ma disposition: la distance entre la caméra et le personnage, la taille du personnage, ainsi que les vertex du personnage (le personnage est un modèle 3D)

Pouvez-vous m'aider à trouver ce calcul?

Merci d'avance

Posté par
isador
re : Création d'une équation pour un programme 07-08-15 à 13:29

personne n'aurais une petite idée?

Posté par
mdr_non
re : Création d'une équation pour un programme 07-08-15 à 14:59

bonjour : )

je pense (j'en suis sûr) que t'auras des réponses beaucoup plus adaptées sur un forum info,
car ce n'est pas uniquement un problème de maths...

sinon

le problème
*** tu ne peux pas juste faire cos = résultat,
oui tu as raison, quand on travaille avec des float, des double...
c'est une très mauvaise idée de les comparer en utilisant l'opérateur ==
>>> les nombres à virgule flottante sont différents des nombres réels,
par exemple : il est très difficile de représenter exactement le nombre 1.0 dans une machine...

la méthode
*** généralement pour ce genre de problème, on définit plutôt un epsilon,
et on compare de cette façon :
a = b si fabs(a - b) < epsilon  
"fabs est la fonction valeur absolue pour les nombres à virgule flottante"
(il y a d'autres méthodes de comparaisons plus ou moins robustes comme par exemple :
fabs(a - b) < fabs(max(a,b))*epsilon...)
ça dépend beaucoup des valeurs avec lesquelles tu travailles (très grandes ? très petites ? etc...)


*** selon le langage que tu utilises tu peux avoir à ta disposition une fonction
qui te donnera accès à "l'epsilon machine"
c'est le plus petit nombre non nul que ta machine peut représenter...
parfois utile...

ta question
*** pour commencer peut-être pourrais tu nous faire un petit dessin de ta scène ?
représenter le repère...

*** sinon, tu peux utiliser ton débugger et voir un peu quelles valeurs sont prises
par cos(angle caméra), et (coté adjacent)/hypoténuse

Posté par
Amarski
re : Création d'une équation pour un programme 07-08-15 à 22:30

Ca ne serait pas tout simplement une histoire de hitbox ?
Au lieu de viser cos = résultat, vise un parallépipède autour de résultat et vérifie que cos vise ce parallélépipède.

Remplace parallélépipède par rectangle dans un jeu en 2D

Posté par
LeDino
re : Création d'une équation pour un programme 07-08-15 à 22:52

Avec la direction de la caméra, calculer la projection sur l'écran (point visé V).
Prendre G comme centre du personnage (ou le centre de visée théorique, par exemple le milieu des yeux, s'il s'agit de visages...).

Si |GV| < R ...  alors le point G est visé, et donc le personnage l'est.
R : rayon du cercle autour de G qu'il faut viser si on veut que le personnage soit considéré comme visé.
R paramétrable détermine la sensibilité du système de visée.

Posté par
LeDino
re : Création d'une équation pour un programme 07-08-15 à 22:54

Mon rayon R rejoint la "hitbox"  d'Amarski...
... qui lui considère un rectangle de visée au lieu d'un cercle.
Pourquoi pas.

Posté par
isador
re : Création d'une équation pour un programme 09-08-15 à 11:38

déjà merci a tous pour toutes ces réponses, mdr_non je suis désolé je ne peut pas vous communiquer de schémas par manque de temps a cause d'autre activées.

ensuite Amarski et Ledino merci pour ces réponse, avec mon amis (qui s'occupe principalement du rayTrace) nous pensons nous tourner vers un vecteur3D avec une hitbox (de type AABB dans un premier temps, puis en fonction des vertex du model)

je vous ferai signe si on y arrive

Posté par
isador
re : Création d'une équation pour un programme 10-08-15 à 11:32

Bon voila j'ai enfin réussi a faire ce fameux raytrace, merci a tous pour vos réponses

Répondre à ce sujet

Seuls les membres peuvent poster sur le forum !

Vous devez être connecté pour poster :

Connexion / Inscription Poster un nouveau sujet
Une question ?
Besoin d'aide ?
(Gratuit)
Un modérateur est susceptible de supprimer toute contribution qui ne serait pas en relation avec le thème de discussion abordé, la ligne éditoriale du site, ou qui serait contraire à la loi.


Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !