[matlab] prendre des points dans un cadre

Résolu/Fermé
emma_gala Messages postés 4 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 1 août 2008 - 1 août 2008 à 13:53
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 - 2 août 2008 à 13:15
Bonjour à tous !

Je souhaite tirer des points au hasard (avec la fonction rand) dans un "cadre" ; ce cadre est défini par deux carrés, de coté L et l (L>l), tel que l'écart entre ces 2 carrés soit constant sur toute la figure, soit (L-l)/2.

Pour l'instant j'ai essayé de tirer des points au hasard dans le carré "extérieur"
x=L*rand; y=L*rand;
puis de les enlever s'ils sont dans le carré inférieur
while x>0 && x<L
while y>0 && y<L
x=L*rand ;
y=L*rand;
end
end

mais MatLab tourne assez longtemps, et en plus je m'embrouille dans les logiques ( && ||) :s

Savez vous si c'est possible de faire avec la fonction rand une feinte pour que ca me tire les points directement dans le cadre, c'est à dire x et y tels que qu'ils appartiennent tous les 2 à [0 (L-l)/2]U[3(L-l)/2] ?

Merci d'avance !!!

2 réponses

Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 835
1 août 2008 à 17:31
Salut
L=3; % Plus grande longueur
l=2; % Plus petite longueur
n=1e3; % Nombre de points
Z=-L/2+L*rand(2,n);
Z(repmat(abs(Z(1,:))<l/2 & abs(Z(2,:))<l/2,2,1))=[];
Z=reshape(Z,2,size(Z,2)/2);
plot(Z(1,:),Z(2,:),'*');
A plus
2
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 835
2 août 2008 à 13:15
Salut
J'ai oublié quelques précisions.
Pour la ligne n=1e3; % Nombre de points, il s'agit du nombre de points choisis dans le carré de côté L. Après avoir sélectionné seulement les points du cadre, il en reste en moyenne (1-l²/L²)n.
Du coup, si tu veux plutôt choisir un nombre approximatif de points dans le cadre, tu peux écrire un truc du genre
L=3; % Plus grande longueur
l=2; % Plus petite longueur
n=1e3; % Nombre approximatif de points dans le cadre
Z=-L/2+L*rand(2,round(n/(1-l^2/L^2)));
Z(repmat(abs(Z(1,:))<l/2 & abs(Z(2,:))<l/2,2,1))=[];
Z=reshape(Z,2,size(Z,2)/2);
plot(Z(1,:),Z(2,:),'*');
Sinon, pour choisir les points directement dans le cadre, je pense pas que ce soit possible. Enfin là du moins, je vois pas comment faire...
Bonne journée
1