24-05-2012, 04:23 PM
Voilà, j'ai appliqué sans souci les points 1) et 2)
par contre, j'ai eu du souci pour comprendre et mettre en oeuvre le 3) proposé.
Mais par une autre approche, j'ai réussi à m'en sortir:
- si le point A ou le point B est dans le disque alors le segment est forcement présent dans le radar
- sinon, si la projection P du centre O du radar est dans le segment [AB] donc les points A et B se sont part et d'autre du cercle donc une partie du segment [AB] est présent dans le radar.
http://myrina.free-h.net/testradar.svg
Donc, en rouge, les flottes visibles par le radar. Les autres ne sont pas visibles; celles en orange sont celles dont la droite coupe le cercle du radar.
Merci pour l'aide
par contre, j'ai eu du souci pour comprendre et mettre en oeuvre le 3) proposé.
Mais par une autre approche, j'ai réussi à m'en sortir:
- si le point A ou le point B est dans le disque alors le segment est forcement présent dans le radar
- sinon, si la projection P du centre O du radar est dans le segment [AB] donc les points A et B se sont part et d'autre du cercle donc une partie du segment [AB] est présent dans le radar.
$longueurAB=sqrt(($Bx-$Ax)*($Bx-$Ax)+($By-$Ay)*($By-$Ay));
$distOAB=(($Ox-$Ax)*($Bx-$Ax)+($Oy-$Ay)*($By-$Ay))/($longueurAB*$longueurAB);
$longueurOA=sqrt(($Ox-$Ax)*($Ox-$Ax)+($Oy-$Ay)*($Oy-$Ay));
$longueurOB=sqrt(($Ox-$Bx)*($Ox-$Bx)+($Oy-$By)*($Oy-$By));
if ($longueurOA<=$r||$longueurOB<=$r||($distOAB<=1&&$distOAB>=0)) {
$color='red';
} else {
$color='orange';
}
http://myrina.free-h.net/testradar.svg
Donc, en rouge, les flottes visibles par le radar. Les autres ne sont pas visibles; celles en orange sont celles dont la droite coupe le cercle du radar.
Merci pour l'aide