Sylvain Ross wrote:
> Bonjour,
> Ayant les coordonnées dans un repaire orthonormé de :
> - un segment (les 2 coordonnées des extremmitées)
> - un rectangle (soit les 4 coordonnées des 4 coins, même si seulement 2
> sont utiles)
> J'ai beau me creuser la tête, je ne trouve pas de technique (algorithme
> en fait) "pas trop tirée par les cheuveux" pour vérifier que le segment
> croise le rectangle quand les deux extremmitées du segment sont en
> dehors du rectangle.
> Si quelqu'un a une idée ...
> Merci d'avance
> SylvainSoient {xr1,yr1},{xr2,yr2} un côté du rectangle
et {xs1,ys1},{xs2,ys2} le segment intercepteur.
On exprime qu'il y a deux déterminants nuls et deux produits scalaires
négatifs.
Solution préparée avec Mathematica :
test[{xr1_,yr1_},{xr2_,yr2_},{xs1_,ys1_},{xs2_,ys2_}]:=
(xr1^2-2*xr1*xr2+xr2^2+yr1^2-2*yr1*yr2+yr2^2)*(-(xs1*yr1)+
xs2*yr1+xr1*ys1-xs2*ys1-xr1*ys2+xs1*ys2)*(-(xs1*yr2)+xs2*yr2+
xr2*ys1-xs2*ys1-xr2*ys2+xs1*ys2) <= 0
&&
(xr2*yr1-xs1*yr1-xr1*yr2+xs1*yr2+xr1*ys1-xr2*ys1)*(xr2*yr1-xs2*yr1-xr1*yr2+xs2*yr2+xr1*ys2-xr2*ys2)*(xs1^2-2*xs1*xs2+xs2^2+ys1^2-2*ys1*ys2+ys2^2)
<= 0;
En général deux des côtés répondent True au test s'il y a intersection.
Exemple :
test[{1,3},{5,3},{0,0},{3,5}]
True
test[{1,1},{1,3},{0,0},{3,5}]
True
test[{1,1},{5,1},{0,0},{3,5}]
False
test[{5,1},{5,3},{0,0},{3,5}]
False
--
0% de pub! Que du bonheur et des vrais adhérents !
Vous aussi inscrivez-vous sans plus tarder!!
Message posté à partir de
http://www.gyptis.org, BBS actif depuis 1995.