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 ?
), 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
(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.