begin process at 2012 05 30 19:05:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Maths & Algorithmes

 > 

Triangle de vision


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Triangle de vision

samedi 19 février 2005 à 00:38:57 | Triangle de vision

goutbouyo

Membre Club

Salut,

J'ai un petit problème concernant les maths que je n'arrive pas à résoudre.

J'ai un triangle isocèle dans l'espace (en fait c'est un champ de vision) qui est horizontal(donc Y ne varie pas).

Ce triangle est attaché par le milieu de sa base à un ennemie dont je connais la position.

Comment est ce que je peux calculer les coordonnées des sommets de ce triangle en connaissant seulement l'angle de rotation de l'ennemi et sa position ???

C'est en OpenGl.

Vous avez une idée ???

samedi 19 février 2005 à 00:40:47 | Re : Triangle de vision

goutbouyo

Membre Club
Petite rectification :
Ce triangle est attaché à l'ennemie par le milieu de sa base  son sommet.
samedi 19 février 2005 à 10:55:32 | Re : Triangle de vision

erazor

mmm a premiere vu je dirai utilise plutot un arc de cercle qu'un triangle pour ton angle de vision
cela te permettra de verifier juste si d'une part la cible est dans l'angle de vision et d'autre part si elle est a distance pour la voir

et pour cela rien de plus simple, a partir des coordonnes de ta premiere entité et de la deuxieme, il suffit de determiner la distance les separants a l'aide d'un zoli petit... pythagore
(rappel: hypothenuse=racine(a²+b²))

ensuite a toi de trouver une maniere efficace pour determiner si il n'y a pas un objet assez imposant entre les deux entites pour les cachés l'une de l'autre...
samedi 19 février 2005 à 15:21:41 | Re : Triangle de vision

luhtor

Un conseil, oubli les triangles isocèles, mais considère les vecteurs normaux aux deux cotés de ton triangle isocèle (les deux cotés de meme longueur), puis tu fais tourner ces vecteurs en fonction de l'angle de rotation de la personne. Si alpha est l'angle de rotation et beta le champ de vision. Si tu connais les matrices ou les lois de transformation pour les rotations, tu appliques à un vecteur la rotation alpha - beta/2 et l'autre alpha + beta/2.

La suite, pour savoir si quelque chose se trouve dans le champ de vision, deux produits scalaires font l'affaire.

++


samedi 19 février 2005 à 18:55:23 | Re : Triangle de vision

goutbouyo

Membre Club
A Erazor :  ok pour Pythagore,  ça me donne une distance mais si je suis derrière l'ennemie il doit pas me voir aussi bien que si j'étais devant lui.

Donc comment je vérifie si je suis dans le champ de vision de l'ennemie.

A Luthor : ta méthode à l'air efficace mais un peu trop compliquée pour moi ...
samedi 19 février 2005 à 22:17:34 | Re : Triangle de vision

luhtor

Je te donne rapidement l'allure :)
La position du gas, on l'appelle M de coordonnées (x,y).
Le vecteur normal à la première face n1(x1,y1)
puis le deuxième (x2,y2).

On considère maintenant un objet P de coordonnées (a,b).
Le vecteur MP (du gas au point) c'est MP = (a-x , b-y)
Jusque la, ca va ? :)

Et bien l'objet est visible si et seulement si, le produit scalaire de MP par n1 et n2 est positif, c'est à dire :
if  (
    ( (a-x)*x1 + (b-y)*y1 >= 0)
    &&
    ( (a-x)*x2 + (b-y)*y2 >= 0)
    )
alors l'objet est visible.

Voila comment gérer efficacement et relativement simplement quand meme :), la champ de vision, sans calcul de racine carré ou autre qui ralentisse le pc.

Si tu veux savoir comment définir les vecteurs n1 et n2, je peux détailler, si tu veux.
samedi 19 février 2005 à 22:36:19 | Re : Triangle de vision

goutbouyo

Membre Club
Ok merci pour ton explication.

Mais si le sommet du triangle est sur M alors P est visible seulement si les produits scalaires sont négatifs, non ???

samedi 19 février 2005 à 23:44:31 | Re : Triangle de vision

luhtor

Le sommet du triangle dans mon explication c'est le point M, le sommet est ici sur le personnage.

Le fait que ce soit négatif ou positif, si tu changes la direction des vecteurs en leur opposés, oui les test devront etre négatif. Mais moi les vecteurs normal n1 et n2 je considère qu'ils pointent vers l'autre coté du triangle.

Imagine tu es le point M (le sommet du triangle) face a toi, à droite: un coté du triangle, un vecteur normal qui part du coté vers la gauche. Le produit scalaire permet de séparer le plan est deux.
Le deuxième produit scalaire partant du coté gauche vers la droite, découpe également le plan en deux parties.
Le plan est donc séparé en 4 parties, la partie qui nous intéresse c'est celle du milieu devant le point M, donc la positivité des 2 produits scalaires. J'espère avoir été clair :)


dimanche 20 février 2005 à 12:16:28 | Re : Triangle de vision

erazor

pour ce qui est de ma méthode il te suffit de verifier si angle 1 champ de vision<angle visee autre entitee<angle 2 champ de vision

et s'il est pas compris dedans ba la c sur qu'il peut pas le voir
c meme a mon avis le premier test a faire 

pour ce qui est de l'explication de luthor, desolé mais mes connaissances en maths étant un peu faibles (quoi? qui a dit que j'ai passé u bac S SI?) je suis desolé mais je ne peux pas aider :-)
dimanche 20 février 2005 à 13:26:05 | Re : Triangle de vision

luhtor

Erazor, en fait, ca dépend si on veut que ce soit rapide. Ta méthode va demander les fonctions arcsinus, arccosinus, et arctangente. :), voila le problème. Enfin c'est pas vraiment pas un problème, mais on peut faire beaucoup plus rapide et plus élégant je pense :) Note également, qu'avec ces fonctions on va etre "emmerdé" par les problèmes de définitions :)
Exemple:
arctan(90°) c'est l'infini, donc il va apparaitre des bugs, ou alors, ca va demander beaucoup de précaution, de cas particulier, bref, vous imaginez :) Alors vous allez me dire, bas on utilise arccos et arcsin, qui sont plus sympa. Ben oue, mais va falloir faire le rapport, et la division par zero est pas loin :)

voila :)



1 2

Cette discussion est classée dans : position, triangle, vision


Répondre à ce message

Sujets en rapport avec ce message

Récupérer la couleur d'un pixel à la position x,y de l'écran [ par atao ] quelqu' un sait il comment peut on récupérer la couleur d'un pixel à la position x,y de l'écranmerciatao. (vc++) menu popup [ par madVinz ] $@lµT, je cherche un faire un menu ki saffiche a la position du curseur, mé sans fenetre, qd on lance le prog, le menu saffiche direct la ou é le curs chercher la position d'un caractere [ par Johjo ] Bon, je cherche à obtenir la position d'une chaine de caractere dans une autre chaine de caractere.Mais les seuls fonctions que j'ai trouvé me renvoye Recuperer des données dans une char [ par Johjo ] JE voudrais savoir si il y a une fonction pour recuperer des données dans une chaine de caractere. Par exemple, j'ai "voiture", je voudrais recuperer position d'un control [ par Xs ] salut !!comment on peut récuperer la position X,Y d'un objet et sa taille (longueur, largeur);j'entend en fait par objet, un bouton.merci Connaitre la position du curseur!!! [ par tormoj ] Salut tout le monde,je voudrais savoir comment on fait pour connaitre la position du curseur dans une EditBox?Et enfin comment on fait pour griser tou Position de la souris. [ par Colombus ] Bonjour, Dans un projet MFC j'ouvre un bitmap; Je voudrais par la suite, "uniquement" après clic sur un bouton pouvoir avec la souris cliquer sur un p Need advice [ par hotnicks ] Bonjour,je suis en train d'écrire un jeu de plateau, dans lequel les 'pions' sont appelés pièces. Je veux être capable de lister tous les coups légaux Position du curseur [ par CyberP ] En mode console (MS-DOS), comment changer la position du curseur sur l'écran pour pouvoir écrire à un endroit précis ?Dans un autre compilateur, la fo triangles et OPENGL [ par kapotman ] Bonjour a tousje cherche un source en c ou C++ pour visualiser un triangle dans une fenetre avec translation , rotation et changement d'echelle sans u


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,618 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales