Algo - point dans un rectangle

Résolu/Fermé
OConell Messages postés 139 Date d'inscription samedi 1 novembre 2008 Statut Membre Dernière intervention 13 octobre 2010 - 6 déc. 2009 à 16:00
loysacha Messages postés 3 Date d'inscription dimanche 13 juillet 2014 Statut Membre Dernière intervention 17 juin 2015 - 17 juin 2015 à 12:17
Bonjour,

Je réalise un 'programme' sous matlab, et j'aurais besoin de savoir si un point est dans un carré.

Pour définir le carré, je connais les équations des 4 droites et les 4 coordonnées des coins.

si vous ne connaissez pas Matlab c'est pas un problème, je veux surtout la méthode ou un algorithme.

Merci d'avance

7 réponses

Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 259
6 déc. 2009 à 17:06
Une idée comme ça :
- Classer les coins par y croissant (liste c(i))
- Tester si le point est compris entre y min et y max, si c'est pas le cas pas la peine d'aller plus loin.
- Tester si des coins ont des coordonnées en commun, si c'est le cas on est sur le problème trivial d'un carré parallèle aux axes.
Sinon :
- utiliser l'équation reliant c(1) à c(2) (fonction f12(x)) et déterminer si y > f12(x)
- pareil avec c(1) et c(3)
- utiliser l'équation reliant c(3) à c(4) (fonction f34(x)) et déterminer si y < f34(x)
- pareil avec c(2) et c(4)
Si ses 4 conditions sont vraies alors le point est dans le carré.

EDIT: orthographe...
1
loysacha Messages postés 3 Date d'inscription dimanche 13 juillet 2014 Statut Membre Dernière intervention 17 juin 2015
17 juin 2015 à 12:17
Bonjour,
c'est le même cas que j'ai, mais mon rectangle a des coordonnées en communs
0
OConell Messages postés 139 Date d'inscription samedi 1 novembre 2008 Statut Membre Dernière intervention 13 octobre 2010 8
6 déc. 2009 à 20:59
l'erreur vient juste de la fonction : coefficientDroite
a=(p1(2)-p2(2))/ (p1(1)-p2(1)) ;

et voila ça marche.

Merci beaucoup Flachy Joe ;)
1
OConell Messages postés 139 Date d'inscription samedi 1 novembre 2008 Statut Membre Dernière intervention 13 octobre 2010 8
6 déc. 2009 à 17:15
Tout d'abord merci

pour le premier point c'est toujours le cas dans mon problème
pour le deuxième ce n'est vrai qu'une voir deux fois (toujours pour mon pb)
et le 3ème est une solution possible sauf que si j'ai bien compris elle n'est pas universelle...

j'entends par la que je fais mes calculs sur des images d'une vidéo et le rectangle (qui d'ailleurs je viens de réalisé est plutôt un parallélogramme ) se déplace et tourne sur lui même à plus de 180°.
Ai je raison d'après toi?
0
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 259
6 déc. 2009 à 17:22
Je pense que ça fonctionne, il faut juste reclasser les coins dans le bon ordre pour chaque image de la vidéo.
0
OConell Messages postés 139 Date d'inscription samedi 1 novembre 2008 Statut Membre Dernière intervention 13 octobre 2010 8
6 déc. 2009 à 20:22
pas faux... j'ai donc essayé mais ça marche pas (sans le test 'if' qui traduit les test de cette méthode dans le 'for' ,j'ai bien qlq chose qui s'affiche, mais aussi les parties n'étant pas dans le rectangle voulu... y a t-il une erreur?

picots_ord_y=sortrows(picots_ord,2)

[a1,b1]=coefficientDroite(picots_ord_y(1,:),picots_ord_y(2,:))
[a2,b2]=coefficientDroite(picots_ord_y(1,:),picots_ord_y(3,:))
[a3,b3]=coefficientDroite(picots_ord_y(3,:),picots_ord_y(4,:))
[a4,b4]=coefficientDroite(picots_ord_y(2,:),picots_ord_y(4,:))


height = size(photo2,1);
width = size(photo2,2);
xMax = xMin+width-1;
yMax =yMin+height-1;

for j=xMin:xMax
for i=yMin:yMax
if(i>(a1*j+b1) && i>(a2*j+b2) && i<(a3*j+b3) && i<(a4*j+b4))
img_vid(i,j,1)=double(photo2(i-yMin+1,j-xMin+1,1));
img_vid(i,j,2)=double(photo2(i-yMin+1,j-xMin+1,2));
img_vid(i,j,3)=double(photo2(i-yMin+1,j-xMin+1,3));
end
end
end
...
function [ a, b ] = coefficientDroite( p1,p2 )

a=(p1(2)-p2(2))/p1(1)-p2(1);
b=p1(2)-p1(1)*a;
end
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
OConell Messages postés 139 Date d'inscription samedi 1 novembre 2008 Statut Membre Dernière intervention 13 octobre 2010 8
9 déc. 2009 à 02:39
Salut

encore moi, même si c'est résolu, en fait pas tout a fait.
En effet, comme je l'ai dit, la méthode ci dessus est appliquée sur 250 images d'une vidéo. Hors, pour certaines (très peu) je me retrouve avec une zone que je veux extraire grâce a la méthode... en gros ça ne marche pas tout le temps. Pourquoi, je ne comprend pas, j'ai fait les calculs mais ce n'est pas logique je trouve.

Avez vous une explication

NB : Les points du parallélogramme ne sont pas fixes entre tout au long de la vidéo.
0
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 259
11 déc. 2009 à 18:30
Salut,
ben là je vois pas ce qui peux foirer, les points seraient-ils dans une configuration particulière ?
Aurais tu la possibilité de me fournir le code et les images qui posent problème ?
Si c'est ok envoie moi un MP avec ton adresse e-mail (ou MSN, GTalk, ICQ, Skype, ou MySpaceIM) pour que je te file la mienne.
0
OConell Messages postés 139 Date d'inscription samedi 1 novembre 2008 Statut Membre Dernière intervention 13 octobre 2010 8
21 déc. 2009 à 18:07
Salut

En ce qui me concerne, j'ai résolu mon problème avec une autre technique.

Pour résumer, sur chaque image d'une vidéo, je détectais 4 points.

Ensuite, je prenais une autre image et je réalisez une homographie afin que cette deuxième image correspondent à la zone définie par les 4 points détectés:
tform = cp2tform(coord_ini,picots_ord,'projective');
photo2 = imtransform(double(photo),tform,'Fill',-1);

Enfin, il fallait copier la deuxième image dans la première.


Je me servais de la technique des messages précédents pour l'incrustation.
Cependant, le paramètre en gras de la fonction imtransform m'a permis de définir les zone n'appartenant pas à l'image homographiée (car leur valeur valais -1 - -1 n'es pas un code couleur...)... enfin si je ne suis pas assez claire je vous invite à regarder l'aide.

sur ceux merci Flachy Joe
0