Matlab: come costruire un dominio convesso
Salve,
definendo in Matlab un array n x 2 che ha per componenti le coordinate degli n vertici di un dominio poligonale piano, come posso calcolarmi l'array relativo al dominio poligonale convessificato? Provo a fare un esempio:
se chiamo $ r $ l'array che mi definisce il mio dominio poligonale piano,
$ r=[ ( 0 , 0 ),( 5 , 0 ),( 5 , 1 ),( 1 , 1 ),( 1 , 5 ),( 0 , 5 ) ] $, andando a plottare:
come potrei calcolarmi l'array $ rg $ che avrà per componenti le coordinate dei vertici del dominio poligonale convessificato di $ r $? Ovvero:
$ rg=[ ( 0 , 0 ),( 5 , 0 ),( 5 , 1 ),( 1 , 5 ),( 0 , 5 ) ] $ , andando a plottare (il dominio in verde tratteggiato):
definendo in Matlab un array n x 2 che ha per componenti le coordinate degli n vertici di un dominio poligonale piano, come posso calcolarmi l'array relativo al dominio poligonale convessificato? Provo a fare un esempio:
se chiamo $ r $ l'array che mi definisce il mio dominio poligonale piano,
$ r=[ ( 0 , 0 ),( 5 , 0 ),( 5 , 1 ),( 1 , 1 ),( 1 , 5 ),( 0 , 5 ) ] $, andando a plottare:

come potrei calcolarmi l'array $ rg $ che avrà per componenti le coordinate dei vertici del dominio poligonale convessificato di $ r $? Ovvero:
$ rg=[ ( 0 , 0 ),( 5 , 0 ),( 5 , 1 ),( 1 , 5 ),( 0 , 5 ) ] $ , andando a plottare (il dominio in verde tratteggiato):

Risposte
Devi scegliere in modo opportuno alcuni vertici tra quelli di partenza. Chiama $x_{max}$ e $x_{min}$ il massimo e il minimo valore assunto dalle ascisse di tali vertici, e procedi come segue:
- Chiama $A_0=(x_0,y_0)$ il vertice la cui ascissa è minima, cioè $x_0=x_{min}$, e se ce n'è più di uno sceglilo in modo che $y_0$ sia minimo;
- Scegli $A_1=(x_1,y_1)$ in modo che $x_1 > x_0$ e che il rapporto ${y_1-y_0}/{x_1-x_0}$ sia minimo (se ce n'è più di uno scegli quello più lontano da $A_0$), e ripeti il procedimento finché non arrivi a un vertice $A_k=(x_k,y_k)$ tale che $x_k=x_{max}$;
- Se ci sono altri vertici aventi come ascissa $x_{max}$, chiama $A_{k+1}$ quello con ordinata massima;
- Ripeti i tre passaggi precedenti per tornare da $x_{max}$ a $x_{min}$ (questa volta si dovrà avere $x_{i+1}
I vertici così ottenuti formeranno il poligono convesso cercato.
- Chiama $A_0=(x_0,y_0)$ il vertice la cui ascissa è minima, cioè $x_0=x_{min}$, e se ce n'è più di uno sceglilo in modo che $y_0$ sia minimo;
- Scegli $A_1=(x_1,y_1)$ in modo che $x_1 > x_0$ e che il rapporto ${y_1-y_0}/{x_1-x_0}$ sia minimo (se ce n'è più di uno scegli quello più lontano da $A_0$), e ripeti il procedimento finché non arrivi a un vertice $A_k=(x_k,y_k)$ tale che $x_k=x_{max}$;
- Se ci sono altri vertici aventi come ascissa $x_{max}$, chiama $A_{k+1}$ quello con ordinata massima;
- Ripeti i tre passaggi precedenti per tornare da $x_{max}$ a $x_{min}$ (questa volta si dovrà avere $x_{i+1}
I vertici così ottenuti formeranno il poligono convesso cercato.