Condizioni multiple ciclo while

di il
4 risposte

Condizioni multiple ciclo while

Buongiorno a tutti.
Ho un problema circa l'imposizione di condizioni multiple in un ciclo while.
Con questo script voglio generare un numero a piacere di punti che stiano all'interno di un certo poligono e contemporaneamente distino al massimo Dmax (distanza massima che posso imporre) da un certo punto che definisco (XP e YP). I punti saranno quindi nell'intersezione tra questo poligono e un cerchio di dato centro e raggio.
xv e yv contengono i vertici del poligono. x(i) e y(i) sono le coordinate dei punti generati. Vorrei ora imporre che le d(i) siano minori di un certo limite, ma non riesco. Riporto lo script che genera i punti e che funziona. Nell'immagine si capisce bene il problema (vorrei 100 punti solo nel triangolino in alto a destra del quadrilatero).
Grazie

xv =[
0
1
2
0]

yv =[
0
0
3
2]

xmin = min (xv);
ymin = min (yv);
xmax = max (xv);
ymax = max (yv);

XP=3
YP=4

%generazione punti nel poligono
numPointsIn = 100;
for i = 1:numPointsIn
flagIsIn = 0;

while ~flagIsIn
x(i) = xmin + (xmax-xmin).*rand(1);
y(i) = ymin + (ymax-ymin).*rand(1);
flagIsIn = inpolygon (x(i),y(i),xv,yv);

d(i) = sqrt((x(i)-XP)^2+(y(i)-YP)^2);
end

end

R1=2.5

th = 0:pi/50:2*pi;
xunit = R1 * cos(th) + XP;
yunit = R1 * sin(th) + YP;

figure
plot(xv,yv,x,y,'r*'); hold on;
plot(XP,YP,'bo');hold on
h = plot(xunit, yunit);
Allegati:
18702_e694666cc617b2d7d175f8addb144491.jpg
18702_e694666cc617b2d7d175f8addb144491.jpg

4 Risposte

  • Re: Condizioni multiple ciclo while

    Dopo il ciclo "for", puoi utilizzare la funzione "find" per trovare, all'interno del vettore "d" le locazioni degli elementi che verificano la tua condizione:
    out=find(d >= R1)
    oppure
    out=find(d <= R1)
    quindi, eliminare gli elementi (di indice "out") dai vettori "x" e "y":
    
    x(out)=[];
    y(out)=[];
    d(out)=[];
    

    punti_in_out.gif
    punti_in_out.gif

  • Re: Condizioni multiple ciclo while

    Grazie mille.
    cosi funziona, l'unico problema è che dovrei includere la selezione dei punti nel ciclo while, perché voglio generare 100 punti (per es. in questo caso) all'interno dell'intersezione. Come appena fatto, si considera solo la parte dei 100 che cadono nell'intersezione.
    Grazie ancora
  • Re: Condizioni multiple ciclo while

    In questo caso puoi modificare l'istruzione che verifica se il punto è all'interno del poligono, così (la definizione di R1 va spostata "prima" del ciclo for):
    flagIsIn = inpolygon (x(i),y(i),xv,yv) && sqrt((x(i)-XP)^2+(y(i)-YP)^2) <= R1;

    punti_in_out.gif
    punti_in_out.gif

  • Re: Condizioni multiple ciclo while

    Grazie, funziona!
Devi accedere o registrarti per scrivere nel forum
4 risposte