AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Champs de vision (c++)

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Mobi
Utilisateur confirmé: Rang ****
avatar

Messages : 1256
Localisation : Dijon

MessageSujet: Champs de vision (c++)   Dim 5 Avr 2015 - 15:04

Salut les milles

Bon j'ai un soucis de trigo (je bosse avec la sfml en c++)
Je cherche à faire un champs de vision pour un personnage

" />

Et je veux faire une méthode Sensor qui détecte si un ennemi est dans l'angle de vision...
Mais je suis confronté a des échecs depuis un petit bout de temps ><

Donc si l'un de vous sait comment faire, je suis pas contre un peu d'aide Smile

Vous pouvez aussi me trouver sur l'irc du cbna

_________________
Revenir en haut Aller en bas
Invité
Invité



MessageSujet: Re: Champs de vision (c++)   Dim 5 Avr 2015 - 16:36

Il te faudra calculer la différence entre deux angles :

fov = taille du champ de vision en °
angle 1 = angle de champs de vision du personnage
angle 2 = calculé à partir de la position de l'objet par rapport au personnage

il y a moult façons de  calculer la différence entre deux angles mais personnellement j'utilise la formule suivante :

fonction angle_diff(arg0,arg1)
//arg0 et arg1 en degrées
return ((((arg0 - arg1) % 360) + 540) % 360) - 180;

pour l'objet :

calculer la différence d'angle entre la direction (angle2) et la direction de champs de vision du personnage (angle1)
stocker la valeur de retour dans une variable (difference) et faire une petite condition :

if (difference > -fov/2 && difference<fov/2)
{
//dessiner l'objet
}
Revenir en haut Aller en bas
Craki
Utilisateur confirmé: Rang ****
avatar

Messages : 1469
Localisation : Dans l’univers de métamatière

MessageSujet: Re: Champs de vision (c++)   Dim 5 Avr 2015 - 21:33

Perso j’aurais combiné le produit scalaire avec la fonction Arccos.

u · v = uxvx + uyvy = ||u|| × ||v|| cos (u ; v)

Avec un vecteur qui va du détecteur à l’objet à détecter et l’autre qui va dans la direction du détecteur.

_________________
Revenir en haut Aller en bas
Mobi
Utilisateur confirmé: Rang ****
avatar

Messages : 1256
Localisation : Dijon

MessageSujet: Re: Champs de vision (c++)   Dim 5 Avr 2015 - 21:51

J'ai réussi, mais j'ai encore quelques bugs... comme un angle qui va de 90 à -270

_________________
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
avatar

Messages : 1329
Localisation : Grenoble / Méribel
Projet Actuel : CBNA

MessageSujet: Re: Champs de vision (c++)   Lun 6 Avr 2015 - 9:54

Surement la même chose que ce qui précède mais :

Code:

vec2 sensorDirection = (cos(direction),sin(direction))
vec2 ennemyDirection = normalize(ennemyPosition-myPosition)
return dot(sensorDirection,ennemyDirection) > 0.0

0.0 pour un angle de 90°
Dans le cas générale : remplacer 0.0 par cos(angleSouhaité)

_________________

D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Champs de vision (c++)   Lun 6 Avr 2015 - 14:13

J'ai aussi fait un truc du genre pour un système de caméra de surveillance.
Donc perso j'ai utilisé les déterminant, et donc ma fonction ca donne ca :
Code:
protected boolean isAngleInRange(double angle, double angleMin, double angleMax){
      boolean in=false;
      Point p=distDir(1000,angle);
      Point pMin=distDir(1000,angleMin);
      Point pMax=distDir(1000,angleMax);
      if(angleMax-angleMin<180){
         in=pMin.x*p.y-pMin.y*p.x<0&&pMax.x*p.y-pMax.y*p.x>0;
      }else{
         in=!(pMin.x*p.y-pMin.y*p.x>0&&pMax.x*p.y-pMax.y*p.x<0);
      }
      return in;
   }
Bon c'est du java mais c'est pas compliqué à comprendre : toi pour les arguments tu donne l'angle de ton rond rouge par rapport à ton carré orange, et pour angleMin et angleMax, bah ce sont les angles de ton capteur, donc à vue de nez sur on image, angleMin c'est un peu moins de 270° et angleMax un peu moins de 360°.
Le seul truc un peu chelou dans mon code c'est le distDir : en fait c'est l'équivalent de lengthdir_x/y sous GM, sauf que ca te ressort un point. En premier argument c'est donc la distance puis l'angle. Suffit de faire un peu de trigo pour ca. Ici j'ai mis 1000, mais c'est juste pour avoir une certaine précision vu que je bosse avec des int, tu peux aussi bien mettre 100 que 10 000... Donc ensuite mes trois points ca me fait 3 vecteurs (qui partent de l'origine), et ensuite j'ai plus qu'à utiliser la méthode de l'argument pour vérifier que ton angle est bien entre les deux min et max.

J'ai pas vraiment regardé le truc des autres (qu'est ce que c'est que ca, normalize ? Yum! ), mais mon truc marche (normalement...).
Faut faire gaffe avec les angles, perso j'ai toujours pleins de ***** parce qu'ils sont jamais compris entre 0 et 360°. Alors bien sûr pour pas mal de trucs ca change rien, mais des fois ca te fait de la pure *****... Donc ouais, gérer les angles correctement dès le départ, c'est pas mal awesome (ca t'évite de te retrouver avec un angle de -11000°..)

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mobi
Utilisateur confirmé: Rang ****
avatar

Messages : 1256
Localisation : Dijon

MessageSujet: Re: Champs de vision (c++)   Lun 6 Avr 2015 - 15:35

Ouai, là par exemple j'ai mon ***** d'angle qui va juste de 90 à -270 et c'est super bizarre ><

_________________
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Champs de vision (c++)   Lun 6 Avr 2015 - 16:06

Ouais voilà Razz
De mémoire le modulo marche aussi sur les nombres négatifs, donc pour avoir un nombre entre 0 et 360 dans tous les cas, de mémoire faut faire ((angle%360)+360)%360

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Champs de vision (c++)   

Revenir en haut Aller en bas
 
Champs de vision (c++)
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» La chute de feu, une vision très rare
» Descente Venomous Villains ce matin sur les Champs ! (photos ajoutées)
» 100° singe, champs morphiques et SV
» Médias étrangers, une vision étrange...
» Achats MAC au Sephora Champs Elysée et Rosny sous Bois

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide confirmés-
Sauter vers: