[Résolu]Besoin d'aide pour un calcul de champs de vision.

Réponses à toutes vos questions de la 2nde à la Terminale toutes séries
Slash94
Membre Naturel
Messages: 13
Enregistré le: 05 Aoû 2017, 14:02

[Résolu]Besoin d'aide pour un calcul de champs de vision.

par Slash94 » 16 Sep 2017, 22:24

Salut à tous ! :-)

Alors voilà, je conçois un petit programme en 2D en langage C++.

J'ai obtenu un angle entre 2 vecteurs.

Les 2 vecteurs sont les suivants :

C[x,y] étant la position de ma caméra.
O[x,y] étant la position d'un obstacle.

Mon champs de vision est un angle de 60 degrés qui part de la caméra et qui a une orientation dépendant de la variable angle ( donc la valeur d'angle jusqu'à la valeur d'angle + 60 degrés, par exemple si mon angle fait 220 degrés, ma caméra aura un champs de vision qui ira de 220 jusqu'à 280 degrés etc.. )

Je calcule l'angle obtenu par ces deux vecteurs en utilisant Atan2 :

int d = atan2(O.y-C.y, O.x-C.x) * 180/PI + 180;

( +180 afin que mon atan2 soit effectif de 0 à 360 degrés ( et non de -180 à 180 ) ).


Je désirerais donc déterminer si mon obstacle ( autrement-dit le point O[x,y] ) est dans le champs de vision de 60 degrés de ma caméra C[x,y] ( qui est donc un angle de 60 degrés ) ou non.

J'aimerais faire comme ceci en gros :

Hors de champs de vision, mon point est rouge, le calcul me renverra "faux/false" ou 0.

https://image.noelshack.com/fichiers/20 ... 2134-1.png

Si mon point est dans le champs de vision, mon point sera vert, le calcul me renverra donc "true/false" ou 1.

Afin d'avoir ce résultat :

https://image.noelshack.com/fichiers/20 ... 2231-2.png

Evidemment, je n'ai pas trouvé la solution, donc j'ai colorié le point en vert sur paint pour vous montrer :D

Comment pourrais-je donc déterminer si mon point est dans mon angle ou non ?
Je suis une d'une nullité absolument faramineuse en mathématiques mais ce calcul me serait extrêmement utile donc je l'étudierais avec la plus grande attention si y en a un parmi vous qui serait susceptible de bien vouloir m'aider !

Merci à vous énormément ! ;)
Modifié en dernier par Slash94 le 17 Sep 2017, 09:24, modifié 1 fois.



Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21709
Enregistré le: 11 Nov 2009, 21:53

Re: Besoin d'aide pour un calcul de champs de vision ( atan2

par Ben314 » 17 Sep 2017, 00:09

Salut,
Bon, ben dés le départ, ça commence mal...
Slash94 a écrit:int d = atan2(O.y-C.y, O.x-C.x) * 180/PI + 180;
( +180 afin que mon atan2 soit effectif de 0 à 360 degrés ( et non de -180 à 180 ) ).
Certes, partant d'un nombre entre -180 et 180, si on lui ajoute 180, le nouveau nombre est entre 0 et 360, mais il faudrait peut être se poser la question de savoir si ça correspond bien au même angle ou pas et là, déjà, c'est raté.
Si un angle mesuré entre -180° et +180° vaut 90° alors mesuré entre 0° et 360° ben il vaut toujours 90° et absolument pas 90°+180°. Et d'un autre coté, si un angle mesuré entre -180° et +180° vaut -90° alors mesuré entre 0° et 360° il vaut 270° qui n'est pas non plus égal à -90°+180°.
Bref, partant d'un angle mesuré entre -180° et +180°, si on veut avoir sa mesure entre 0° et 360°, alors soit l'angle est positif et y'a pas à y toucher, soit il est négatif et il faut ajouter 360°(=1 tour complet=rien du tout en terme angulaire).
Ensuite, si tu as deux angles A et B (mesurés entre 0° et 360° tout les deux) et que tu veut savoir si B est compris entre A et A+60°, ben tu calcule B-A qui va être entre -360° et 360° et si le résultat est négatif, tu lui rajoute 360° pour le rendre positif. Ensuite tu regarde si le résultat (après l'éventuelle addition de 360°) est inférieur à 60°.

Bref, la "règle", c'est qu'un angle, ça se mesure à 360° prés, c'est à dire à un tour prés et donc que si tu as un angle qui est pas entre 0° et 360°, ben tu lui rajoute (ou soustrait) un certain nombre de fois 360° pour qu'il rentre dans les clous (en math, ça s'appelle de l'arithmétique modulaire)
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Slash94
Membre Naturel
Messages: 13
Enregistré le: 05 Aoû 2017, 14:02

Re: Besoin d'aide pour un calcul de champs de vision ( atan2

par Slash94 » 17 Sep 2017, 09:13

Ben314 > MERCIIIIIIIIIIIIIIIIIIIIIIIII !!!!! :D :D :D

Ça fonctionne du tonnerre grâce à toi !

A chaque fois que j'ai un problème de maths et que je poste sur des forums de programmation, je n'ai que des réponses évasives / à côté de la plaque etc.

Mais dés que je poste une question sur CE forum j'ai des réponses claires, concises & expéditives, merci infiniment à toi en tout cas, voici la tête de ma fonction du coup :-)

Code: Tout sélectionner
        if (angle<0) angle = 360;
        if (angle>360) angle = 0;

        int d = atan2(obstacle.getPosition().y-m_position.y,
                      obstacle.getPosition().x-m_position.x) * 180/PI;
        if (d<0) d+=360;

        int k = (d-angle);
        if (k<0) k+= 360;

        if (k<60) std::cout << "Je suis dans l'angle !" << std::endl;


Encore merci à toi l'ami ! :-)

Avant :

https://image.noelshack.com/fichiers/20 ... 6117-1.png

Après :

https://image.noelshack.com/fichiers/20 ... 6140-2.png

:D

Slash94
Membre Naturel
Messages: 13
Enregistré le: 05 Aoû 2017, 14:02

Re: [Résolu]Besoin d'aide pour un calcul de champs de vision

par Slash94 » 17 Sep 2017, 12:32

Voilà la fausse 3D que j'ai pu simuler directement avec ce calcul d'angle grâce à toi ce matin, c'est beauuuuuuuuuucoup plus optimisé que le raycasting ( lancé de rayons en boucle à la recherche d'une intersection dans le périmètre )

https://gyazo.com/23afa3bfcacda4f3848f4a731f5feefa

 

Retourner vers ✎✎ Lycée

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 53 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite