Author Topic: Una funzione per la stabilità dei pendii  (Read 42388 times)

0 Members and 1 Guest are viewing this topic.

afazio

  • Guest
Re: Re: Una funzione per la stabilità dei pendii
« Reply #30 on: 14 December , 2009, 11:11:08 AM »
Pensiamo adesso su come operare la suddivisione in conci del pendio.

La suddivisione dovrebbe partire dal primo punto di intersezione del profilo col cerchio fino all'ultimo punto di intersezione.
Occorrerebbe pertanto determinarsi tali punti di intersezione. La cosa risulta alquanto ardua, poiche occorrerebbe determinarsi i punti di intersezioni di "una spezzata" con un cerchio determinando per ogni segmento costituente la polilinea, la sua posizione reciproca rispetto al cerchio e capire quele di essi interseca il cerchio se lo interseca.

Non ho trovato la soluzione di questa via.

Allora conviene pensare ad una suddivisione del tratto di pendio compreso tra xc-R ed Xc+R (cioe' il tratto di pendio coinvolto dal diametro del cerchio) magari stabilendo un numero n di suddivisioni (o in alternativa stabilire una dimensione massima del concio ed in base a questa determinarsi il numero di suddivisioni.



Cosi facendo superiamo il problema delle intersezioni ed abbiamo comunque delimitato il campo di scansione dei conci.

Partendo dallo schema sopra riportato vediamo adesso come modificare la nostra funzione concio per adattarla a tutti i casi che possiamo riscontrare.

Il primo caso, che in una certa misura abbiamo gia visto, e' quello per cui il concio, pur interno al diametro si trova esterno al cerchio



In questo caso come gia detto, l'area risulta essere negativa e quindi basta scrivere nella nostra funzione:

if A<0 the A=0

afazio

  • Guest
Re: Re: Re: Una funzione per la stabilità dei pendii
« Reply #31 on: 14 December , 2009, 11:28:29 AM »
Pensiamo adesso su come operare la suddivisione in conci del pendio.

La suddivisione dovrebbe partire dal primo punto di intersezione del profilo col cerchio fino all'ultimo punto di intersezione.
Occorrerebbe pertanto determinarsi tali punti di intersezione. La cosa risulta alquanto ardua, poiche occorrerebbe determinarsi i punti di intersezioni di "una spezzata" con un cerchio determinando per ogni segmento costituente la polilinea, la sua posizione reciproca rispetto al cerchio e capire quele di essi interseca il cerchio se lo interseca.

Non ho trovato la soluzione di questa via.

Allora conviene pensare ad una suddivisione del tratto di pendio compreso tra xc-R ed Xc+R (cioe' il tratto di pendio coinvolto dal diametro del cerchio) magari stabilendo un numero n di suddivisioni (o in alternativa stabilire una dimensione massima del concio ed in base a questa determinarsi il numero di suddivisioni.



Cosi facendo superiamo il problema delle intersezioni ed abbiamo comunque delimitato il campo di scansione dei conci.

Partendo dallo schema sopra riportato vediamo adesso come modificare la nostra funzione concio per adattarla a tutti i casi che possiamo riscontrare.

Il primo caso, che in una certa misura abbiamo gia visto, e' quello per cui il concio, pur interno al diametro si trova esterno al cerchio



In questo caso come gia detto, l'area risulta essere negativa e quindi basta scrivere nella nostra funzione:

if A<0 then A=0

Altro caso particolare è quello per cui avendo adottato quel sistema di suddivisione in conci, tra gli estremi superiori del concio cada un vertice del profilo, come in  figura che segue



Attualmente la funzione calcola l'area che ho indicto con A. Se non apportassimo alcuna modifica avremmmo un errore pari all'area che ho indicato con A' sia in negativo che in positivo.

Occorre quindi procedere ad una variazione che ci costa solo l'inserimento di altri due parametri in ingresso alla nostra funzione concio.

I due parametri sono la ascissa del vertice interno e la sua ordinata, Li indico con
xv, yv

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #32 on: 14 December , 2009, 11:34:39 AM »
ihihihih

quanto mi date per proseguire queste lezioncine?

Offline ing.Max

  • Nonno del forum
  • *****
  • Posts: 1116
  • Karma: 88
Re: Re: Una funzione per la stabilità dei pendii
« Reply #33 on: 14 December , 2009, 12:03:31 PM »
ihihihih

quanto mi date per proseguire queste lezioncine?

Dipende... rilasci l'attestato di frequenza alla fine?
"La conoscenza non occupa spazio"

afazio

  • Guest
Re: Re: Re: Re: Una funzione per la stabilità dei pendii
« Reply #34 on: 14 December , 2009, 12:59:08 PM »


Altro caso particolare è quello per cui avendo adottato quel sistema di suddivisione in conci, tra gli estremi superiori del concio cada un vertice del profilo, come in  figura che segue



Attualmente la funzione calcola l'area che ho indicto con A. Se non apportassimo alcuna modifica avremmmo un errore pari all'area che ho indicato con A' sia in negativo che in positivo.

Occorre quindi procedere ad una variazione che ci costa solo l'inserimento di altri due parametri in ingresso alla nostra funzione concio.

I due parametri sono la ascissa del vertice interno e la sua ordinata, Li indico con
xv, yv

Come prima soluzione veine subito da paensare di cambiare la suddivisione in conci del pendio ed inserire anche le verticali per i vertici del profilo.
Questa soluzione, seppur praticabile, comporta che dovremmo apportare ulteriori suddivisioni dovute ai vertici di ciascuno strato sottostante, i cui vertici non per forza coincidono con quelli della superficie topografica, ed eventualmente anche i vertici della linea di falda se presente.
No. Abbandoniamo pertanto questa idea e sobbarchiamoci l'aggiunta dei due parametri xv e yv

Potremmo pensare di far calcolare l'area A e poi sommare o sottrarre quella del triangolo campito.

In effetti la formula dell'area effettiva del concio che indico con Ac sarebbe pari ala somma dei seguenti termini:

+ A  area determinata come se non ci fosse il verticie del profilo nel mezzo
+ (xf-xi)*(yf-yi)/2 area del triangolo compreso tra la linea che congiunge i due estrei superiori del concio e la orizzontale passante per l'ordinata yf
- (xv - xi )*(yv - yi)/2 area del triangolo compreso tra xi. xv, yi, yv
- (xf-xv)*(yf-yv)/2 area del triangolo compreso tra xv, xf, yv, yf
- (xv-xi)*(yf-yv)  area del rettangolino compreso tra xi, xv, yv, yf

Se non e' chiaro ditemelo che vedro' di predisporre una figura appositamente

Altra soluzione sarebbe quella di considerare due segmenti circolari delimitati: il primo delimitato dalle verticali passanti per xi e xv, ed il secondo per le verticali passanti per xv ed xf. Cosa che gia sappiamo fare

... segue ...

afazio

  • Guest
Re: Re: Re: Re: Re: Una funzione per la stabilità dei pendii
« Reply #35 on: 14 December , 2009, 13:11:38 PM »


Altro caso particolare è quello per cui avendo adottato quel sistema di suddivisione in conci, tra gli estremi superiori del concio cada un vertice del profilo, come in  figura che segue



Attualmente la funzione calcola l'area che ho indicto con A. Se non apportassimo alcuna modifica avremmmo un errore pari all'area che ho indicato con A' sia in negativo che in positivo.

Occorre quindi procedere ad una variazione che ci costa solo l'inserimento di altri due parametri in ingresso alla nostra funzione concio.

I due parametri sono la ascissa del vertice interno e la sua ordinata, Li indico con
xv, yv

Come prima soluzione veine subito da paensare di cambiare la suddivisione in conci del pendio ed inserire anche le verticali per i vertici del profilo.
Questa soluzione, seppur praticabile, comporta che dovremmo apportare ulteriori suddivisioni dovute ai vertici di ciascuno strato sottostante, i cui vertici non per forza coincidono con quelli della superficie topografica, ed eventualmente anche i vertici della linea di falda se presente.
No. Abbandoniamo pertanto questa idea e sobbarchiamoci l'aggiunta dei due parametri xv e yv

Potremmo pensare di far calcolare l'area A e poi sommare o sottrarre quella del triangolo campito.

In effetti la formula dell'area effettiva del concio che indico con Ac sarebbe pari ala somma dei seguenti termini:

+ A  area determinata come se non ci fosse il verticie del profilo nel mezzo
+ (xf-xi)*(yf-yi)/2 area del triangolo compreso tra la linea che congiunge i due estrei superiori del concio e la orizzontale passante per l'ordinata yf
- (xv - xi )*(yv - yi)/2 area del triangolo compreso tra xi. xv, yi, yv
- (xf-xv)*(yf-yv)/2 area del triangolo compreso tra xv, xf, yv, yf
- (xv-xi)*(yf-yv)  area del rettangolino compreso tra xi, xv, yv, yf

Se non e' chiaro ditemelo che vedro' di predisporre una figura appositamente

Altra soluzione sarebbe quella di considerare due segmenti circolari delimitati: il primo delimitato dalle verticali passanti per xi e xv, ed il secondo per le verticali passanti per xv ed xf. Cosa che gia sappiamo fare

... segue ...

Ma siccome dove ci sta una pentola spesso ci sta anche un coperchio ecco la sorpresa:
E se tra le due verticali che delimitano il concio ci stessero due vertici del profilo?



Ehh no! Minkia, questo non dovevate farmelo
Posso anche pensare di aggiungere altri due parametri nella mia funzione, ma chi mi dice che qualche altro diavolo non ci aggiunga un terzo o un quarto vertice?

Ovviamente questa possibilita e' tanto piu probabile che si verifichi tanto piu grande e' il passo di suddivisione. Certamente non posso pensare di inserire un numero indefinito di parametri per risolvere il problema.
Quindi dobbiamo risolvere a monte questo problema e fissare il passo di suddivisione dei conci in modo tale che non vi siano piu di un vertice all'interno dello stesso concio.
Basta pertanto fissare come pmax il valore del piu piccolo dei segmenti in cui e' schematizzato il profilo. Ovviamente nella sua componente orizzontale includendo anche le superfici di separazione tra gli strati e la linea di falda.
« Last Edit: 14 December , 2009, 14:01:59 PM by afazio »

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #36 on: 14 December , 2009, 19:23:04 PM »
Riassumendo quanto analizzato fino ad adesso, abbiamo la seguente funzione:

Code: [Select]

Function aRccos(num As Double) As Double

aRccos = Atn(-num / Sqr(-num * num + 1)) + 2 * Atn(1)
End Function


'-----
Function arCsin(num As Double) As Double

arCsin = Atn(num / Sqr(-num * num + 1))
End Function


'------
Function segmento(xc As Double, R As Double, x As Double) As Double
Dim beta As Double

beta = 2 * aRccos((x - xc) / R)
segmento = R ^ 2 * beta / 2 - (x - xc) * R * Sin(beta / 2)

End


'-----
Public Function concio(xc As Double, yc As Double, R As Double, _
                        xi As Double, xf As Double, _
                        yi As Double, yf As Double, _
                        xv As duble, yv As Double, flag As Double) As Variant
                       
Dim A As Double ' variabile per il calcolo dell'area
Dim B As Double 'variabile per il calcolo dello sviluppo dell'arco di base
Dim alfa As Double 'variabile per il calcolo dell'angolo di inclinazione della tangente
Dim ym As Double


ym = (yi + yf) / 2

' controllo che il raggio non sia minore o uguale a zero
If R <= 0 Then
    concio = 0
    Exit Function
End If
' controllo che xf sia maggiore di xi
If xf - xi <= 0 Then
    concio = 0
    Exit Function
End If
' controllo che xi ed xf siano all'interno del diametro del cerchio
If xf < xc - R Or xi > xc + R Then
    concio = 0
    Exit Function
End If
' controllo che xv sia all'interno di xi xf, nel caso cada all'esterno
' lo assumo pari ad xi
If xv < xi Or xv > xf Then
    xv = xi
    yv = yi
End If
' calcolo l'area sottesa dalla congiungente yi-yf
A = (segmento(xc, R, xi) - segmento(xc, R, xi)) / 2 - (xf - xi) * (yc - ym)
' adesso considero la presenza del vertice intermedio
A = A + (xf - xi) * (yf - yi) / 2 - (xv - xi) * (yv - yi) / 2 - (xf - xi) * (yf - yv) / 2 - (xv - xi) * (yf - yv)

' controllo area negativa
If A < 0 Then
    concio = 0
End If

' calcolo dell'angolo alfa
alfa = arCsin((xi - xc) / R) + (arCsin((xi - xc) / R) - arCsinn((xf - xc) / R)) / 2

' calcolo dello sviluppo dell'arco di base
B = R * arCsin((xi - xc) / R) - arCsin((xf - xc) / R)

Select Case flag
    Case 1
        concio = A
    Case 2
        concio = alfa
     Case 3
        concio = B
    Case Else
        concio = 0
End Select

End Function
« Last Edit: 15 December , 2009, 10:22:12 AM by afazio »

afazio

  • Guest
Re: Re: Una funzione per la stabilità dei pendii
« Reply #37 on: 15 December , 2009, 10:20:33 AM »
Riassumendo quanto analizzato fino ad adesso, abbiamo la seguente funzione:

Code: [Select]

Function aRccos(num As Double) As Double

aRccos= Atn(-num / Sqr(-num * num + 1)) + 2 * Atn(1)
End Function


'-----
Function arCsin(num As Double) As Double

arCsin = Atn(num / Sqr(-num * num + 1))
End Function


'------
Function segmento(xc As Double, R As Double, x As Double) As Double
Dim beta As Double

beta = 2 * aRccos((x - xc) / R)
segmento = R ^ 2 * beta / 2 - (x - xc) * R * Sin(beta / 2)

End


'-----
Public Function concio(xc As Double, yc As Double, R As Double, _
                        xi As Double, xf As Double, _
                        yi As Double, yf As Double, _
                        xv As duble, yv As Double, flag As Double) As Variant
                       
Dim A As Double ' variabile per il calcolo dell'area
Dim B As Double 'variabile per il calcolo dello sviluppo dell'arco di base
Dim alfa As Double 'variabile per il calcolo dell'angolo di inclinazione della tangente
Dim ym As Double


ym = (yi + yf) / 2

' controllo che il raggio non sia minore o uguale a zero
If R <= 0 Then
    concio = 0
    Exit Function
End If
' controllo che xf sia maggiore di xi
If xf - xi <= 0 Then
    concio = 0
    Exit Function
End If
' controllo che xi ed xf siano all'interno del diametro del cerchio
If xf < xc - R Or xi > xc + R Then
    concio = 0
    Exit Function
End If
' controllo che xv sia all'interno di xi xf, nel caso cada all'esterno
' lo assumo pari ad xi
If xv < xi Or xv > xf Then
    xv = xi
    yv = yi
End If
' calcolo l'area sottesa dalla congiungente yi-yf
A = (segmento(xc, R, xi) - segmento(xc, R, xi)) / 2 - (xf - xi) * (yc - ym)
' adesso considero la presenza del vertice intermedio
A = A + (xf - xi) * (yf - yi) / 2 - (xv - xi) * (yv - yi) / 2 - (xf - xi) * (yf - yv) / 2 - (xv - xi) * (yf - yv)

' controllo area negativa
If A < 0 Then
    concio = 0
End If

' calcolo dell'angolo alfa
alfa = arCsin((xi - xc) / R) + (arCsin((xi - xc) / R) - arCsinn((xf - xc) / R)) / 2

' calcolo dello sviluppo dell'arco di base
B = R * arCsin((xi - xc) / R) - arCsin((xf - xc) / R)

Select Case flag
    Case 1
        concio = A
    Case 2
        concio = alfa
     Case 3
        concio = B
    Case Else
        concio = 0
End Select

End Function

Dove va in errore questa funzione?

All'inizio il valore di xi passato alla funzione e' pari, per il tipo di suddivisione adottato, proprio a:
xi=xc-R
mentre alla fine il valore di xf è pari a:
yf=xc+R

Vediamo allora cosa accade alle funzioni trigonometriche inverse
primo caso

arCsin((xi - xc) / R), ma essendo xi=xc-r si ha

arCsin((xc- R - xc) / R) =arCsin(-1)
e sappiamo che il risultato e' pari a -pi.greco/2

Ora, siccome noi abbiamo fatto ricorso ad una funzione apposita (non presente in VBA), per il calcolo dell'arcocoseno:

Function aRccos(num As Double) As Double
      aRccos= Atn(-num / Sqr(-num * num + 1)) + 2 * Atn(1)
End Function

vediamo immeditamante che avendo passato il valore num=-1 si verifica un errore di divisione per zero, infatti

      aRccos(-1) = Atn(1 / Sqr(-1+ 1)) + 2 * Atn(1) = Atn(1 / 0) + 2 * Atn(1)

la stessa cosa vale per la funzione arcoseno

Occorre pertanto procedere ad una correzione delle due funzioni, tale che restituiscano:
l'arcCos il valore di 0 o -pigreco quando si passa un valore di 1 o -1
l'arcSen il valore di pigreco/2 o -pigreco/2 quando si passa un valore di 1 o -1
« Last Edit: 15 December , 2009, 10:26:22 AM by afazio »

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #38 on: 15 December , 2009, 15:09:06 PM »
A questo punto siamo quasi alla fine
ma cirestano da esaminare ancora alcuni casi particolari per i quali richiedo il vostro contributo in idee













afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #39 on: 15 December , 2009, 15:12:32 PM »
Ho notato che premendo sul tasto stampa che si trova in coda alla serie di post si puo' ottenere un originale ed interessante manualetto.
Quel che rompe e' lo sfondo nero di autocad
Vedro per i prossimi post di inserire immagini con sfondo bianco.


saluti

Offline Gilean

  • Administrator
  • Bisnonno Veterano
  • *****
  • Posts: 3292
  • Karma: 202
Re: Una funzione per la stabilità dei pendii
« Reply #40 on: 15 December , 2009, 15:33:47 PM »
stai notando una piccola parte delle cose che si possono fare in questo forum...se vuoi ed hai tempo, smanetta con tutte le funzioni permesse, troverai alcune cose molto interessanti (vedi wysiwyg editor che puoi abilitare dal tuo profilo) ;)
Il calcolo è come la pelle delle @@, lo tiri dove vuoi tu.
Esempio di programmazione a Loop:
L'enunciato che segue è falso
L'enunciato precedente è vero.

Nonostante la consapevolezza dei rischi che si corrono dopo aver visto le prestazioni da 3° dan

Offline xalf70

  • Semi Esperto
  • **
  • Posts: 168
  • Karma: 28
Re: Una funzione per la stabilità dei pendii
« Reply #41 on: 15 December , 2009, 20:49:12 PM »
stai notando una piccola parte delle cose che si possono fare in questo forum...se vuoi ed hai tempo, smanetta con tutte le funzioni permesse, troverai alcune cose molto interessanti (vedi wysiwyg editor che puoi abilitare dal tuo profilo) ;)


ho provato a premere il tasto stampa ma le immagini non le vedo, mi esce il link (http://img130.imageshack.us/img130/4652/pendio.jpg)
c'è modo di visualizzare l'immagine?
grazie

Offline Gilean

  • Administrator
  • Bisnonno Veterano
  • *****
  • Posts: 3292
  • Karma: 202
Re: Una funzione per la stabilità dei pendii
« Reply #42 on: 15 December , 2009, 21:34:59 PM »
quello e' un problema di imageshack, in quanto afazio (giustamente direi) usa le thumbmail per evitare che l'immagine sformi la pagina del forum.
Il calcolo è come la pelle delle @@, lo tiri dove vuoi tu.
Esempio di programmazione a Loop:
L'enunciato che segue è falso
L'enunciato precedente è vero.

Nonostante la consapevolezza dei rischi che si corrono dopo aver visto le prestazioni da 3° dan

Offline ferrarialberto

  • Semi Esperto
  • **
  • Posts: 137
  • Karma: 26
Re: Re: Una funzione per la stabilità dei pendii
« Reply #43 on: 15 December , 2009, 22:57:21 PM »
Pensiamo adesso su come operare la suddivisione in conci del pendio.

La suddivisione dovrebbe partire dal primo punto di intersezione del profilo col cerchio fino all'ultimo punto di intersezione.
Occorrerebbe pertanto determinarsi tali punti di intersezione. La cosa risulta alquanto ardua, poiche occorrerebbe determinarsi i punti di intersezioni di "una spezzata" con un cerchio determinando per ogni segmento costituente la polilinea, la sua posizione reciproca rispetto al cerchio e capire quele di essi interseca il cerchio se lo interseca.

Non ho trovato la soluzione di questa via.


Allora conviene pensare ad una suddivisione del tratto di pendio compreso tra xc-R ed Xc+R (cioe' il tratto di pendio coinvolto dal diametro del cerchio) magari stabilendo un numero n di suddivisioni (o in alternativa stabilire una dimensione massima del concio ed in base a questa determinarsi il numero di suddivisioni.



Cosi facendo superiamo il problema delle intersezioni ed abbiamo comunque delimitato il campo di scansione dei conci.

Ciao Afazio
   non mi sembra difficile da risolvere il problema evidenziato in rosso, se ragioni intermini di distanze dal centro. Se la distanza del nodo i della polilinea è < del raggio e se la distanza del nodo i+1 è > (ovvero se accade il contrario) significa che il segmento della polilinea interseca il cerchio, o sbaglio? Dovrebbe essere abbastanza semplice il codice da scrivere. Ciao.
ing. FERRARI Alberto - www.ferrarialberto.it

afazio

  • Guest
Re: Re: Re: Una funzione per la stabilità dei pendii
« Reply #44 on: 15 December , 2009, 23:27:39 PM »

Occorrerebbe pertanto determinarsi tali punti di intersezione. La cosa risulta alquanto ardua, poiche occorrerebbe determinarsi i punti di intersezioni di "una spezzata" con un cerchio determinando per ogni segmento costituente la polilinea, la sua posizione reciproca rispetto al cerchio e capire quele di essi interseca il cerchio se lo interseca.

Non ho trovato la soluzione di questa via.




Ciao Afazio
   non mi sembra difficile da risolvere il problema evidenziato in rosso, se ragioni intermini di distanze dal centro. Se la distanza del nodo i della polilinea è < del raggio e se la distanza del nodo i+1 è > (ovvero se accade il contrario) significa che il segmento della polilinea interseca il cerchio, o sbaglio? Dovrebbe essere abbastanza semplice il codice da scrivere. Ciao.

considera la seguente figura:




col metodo del raggio/distanza i due segmenti (i-1) i  ed i (i+1) verrebbero visti entrambi come esterni.

occorrerebbe pertanto considerare altra condizioneche potrebbe essere la distanza tra segmento e centro.


anche ricorrendo alla distanza tra cerchio e retta su cui giace il segmento non potremmo distinguere i due casi poiche in entrambi i casi abbiamo:

di>R; df>R dc<R
« Last Edit: 15 December , 2009, 23:30:20 PM by afazio »

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24