Hey!
Je te propose mon idée qui est je pense pas très compliquée, ni en calculs, ni à mettre en place:
1) Considérer ton segment comme un morceau de droite:
Il faut récupérer son équation de la forme ax+by+c=0, on va plutôt utiliser y=ax+b.
Si xA <> xB, a=(yA-yB)/(xA-xB) et b = yA-a*xA
Si xA=xB, l'équation est x=xA=xB
(où A(xA,yA) et B(xB,yB) sont les points du segment)
2) Récupérer les radars qui coupent cette droite:
Là une "astuce": il s'agit simplement des cercles dont le centre est à une distance à la droite AB inférieure inférieure à son propre rayon...
On calcule la distance d pour tous tes radars, de centre O(xO,yO) et de rayon R:
si xA<>xB, d=abs(yO-a*xO-b)/sqrt(1+a²)
si xA=xB, d= abs(xO-xA)
Puis tu gardes ceux qui vérifient d<=R
3) Vérifier que ces radars coupent dans la partie [AB] de la droite:
Edit: cette partie est fausse, voir plus bas
Ne garde que les radars qui entrent en collision avec le disque de diamètre AB. Pour cela tu calcules le rayon (un seul calcul):
rAB = sqrt((xB-xA)²+(yB-yA)²)/2
De centre W=((xA+xB)/2 , (yA+yB)/2) qui je note après W(xW,yW)
Pour chaque radar de centre O(xO,yO) de rayon R, la condition s'écrit:
WO <= rAB + R
i.e. sqrt((xW-xO)²+(yW-yO)²) <= rAB + R
Je sais pas si c'est clair, mais ça m'a l'air correct x)
Je te propose mon idée qui est je pense pas très compliquée, ni en calculs, ni à mettre en place:
1) Considérer ton segment comme un morceau de droite:
Il faut récupérer son équation de la forme ax+by+c=0, on va plutôt utiliser y=ax+b.
Si xA <> xB, a=(yA-yB)/(xA-xB) et b = yA-a*xA
Si xA=xB, l'équation est x=xA=xB
(où A(xA,yA) et B(xB,yB) sont les points du segment)
2) Récupérer les radars qui coupent cette droite:
Là une "astuce": il s'agit simplement des cercles dont le centre est à une distance à la droite AB inférieure inférieure à son propre rayon...
On calcule la distance d pour tous tes radars, de centre O(xO,yO) et de rayon R:
si xA<>xB, d=abs(yO-a*xO-b)/sqrt(1+a²)
si xA=xB, d= abs(xO-xA)
Puis tu gardes ceux qui vérifient d<=R
3) Vérifier que ces radars coupent dans la partie [AB] de la droite:
Edit: cette partie est fausse, voir plus bas
Ne garde que les radars qui entrent en collision avec le disque de diamètre AB. Pour cela tu calcules le rayon (un seul calcul):
rAB = sqrt((xB-xA)²+(yB-yA)²)/2
De centre W=((xA+xB)/2 , (yA+yB)/2) qui je note après W(xW,yW)
Pour chaque radar de centre O(xO,yO) de rayon R, la condition s'écrit:
WO <= rAB + R
i.e. sqrt((xW-xO)²+(yW-yO)²) <= rAB + R
Je sais pas si c'est clair, mais ça m'a l'air correct x)