AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -45%
WHIRLPOOL OWFC3C26X – Lave-vaisselle pose libre ...
Voir le deal
339 €

 

 Champs de vision (c++)

Aller en bas 
4 participants
AuteurMessage
Mobi
Utilisateur confirmé: Rang ****
Mobi


Messages : 1256
Localisation : Dijon

Champs de vision (c++) Empty
MessageSujet: Champs de vision (c++)   Champs de vision (c++) EmptyDim 5 Avr 2015 - 17: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

Champs de vision (c++) Captur10" />

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

_________________
Champs de vision (c++) Penguin
Revenir en haut Aller en bas
Invité
Invité




Champs de vision (c++) Empty
MessageSujet: Re: Champs de vision (c++)   Champs de vision (c++) EmptyDim 5 Avr 2015 - 18: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 ****
Craki


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

Champs de vision (c++) Empty
MessageSujet: Re: Champs de vision (c++)   Champs de vision (c++) EmptyDim 5 Avr 2015 - 23: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.

_________________
Champs de vision (c++) 357g46o
Revenir en haut Aller en bas
Mobi
Utilisateur confirmé: Rang ****
Mobi


Messages : 1256
Localisation : Dijon

Champs de vision (c++) Empty
MessageSujet: Re: Champs de vision (c++)   Champs de vision (c++) EmptyDim 5 Avr 2015 - 23:51

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

_________________
Champs de vision (c++) Penguin
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
arthuro


Messages : 1482
Localisation : Paris
Projet Actuel : Diagon https://arthursonzogni.com/Diagon

Champs de vision (c++) Empty
MessageSujet: Re: Champs de vision (c++)   Champs de vision (c++) EmptyLun 6 Avr 2015 - 11: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é)

_________________
Champs de vision (c++) PochetteChamps de vision (c++) Signature.php?gid=588
D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

Champs de vision (c++) Empty
MessageSujet: Re: Champs de vision (c++)   Champs de vision (c++) EmptyLun 6 Avr 2015 - 16: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 ****
Mobi


Messages : 1256
Localisation : Dijon

Champs de vision (c++) Empty
MessageSujet: Re: Champs de vision (c++)   Champs de vision (c++) EmptyLun 6 Avr 2015 - 17:35

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

_________________
Champs de vision (c++) Penguin
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

Champs de vision (c++) Empty
MessageSujet: Re: Champs de vision (c++)   Champs de vision (c++) EmptyLun 6 Avr 2015 - 18: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é





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

Revenir en haut Aller en bas
 
Champs de vision (c++)
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Limitation d'un string celons un champs
» vision d'un IA en cône
» Qui a des lunettes nvidia 3D vision ?
» Champ de vision réaliste
» La vraie vision des choses... est-elle vraie?

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: