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

0 Members and 2 Guests are viewing this topic.

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #90 on: 19 December , 2009, 10:55:59 AM »
Ciao Afazio
  per le intersezioni plurime si potrebbe pensare ad un avviso nel caso in cui siano maggiori di due, oppure scartare direttamente la soluzione. Non ho capito perchè usi 3 muduli per scrivere 3 funzioni: perchè non le raggruppi in uno solo? O magari, perchè non le raggruppi per tipologia in determinati moduli?

Noto con piacere che segui con interesse e che sono riuscito a coinvolgerti.

Grazie.

ciao

Offline xalf70

  • Semi Esperto
  • **
  • Posts: 168
  • Karma: 28
Re: Una funzione per la stabilità dei pendii
« Reply #91 on: 19 December , 2009, 11:03:04 AM »
Anche se non scrivo, hai coinvolto anche me.
aspetto con ansia i nuovi messaggi.
complimenti  :clap:

Offline ferrarialberto

  • Semi Esperto
  • **
  • Posts: 137
  • Karma: 26
Re: Una funzione per la stabilità dei pendii
« Reply #92 on: 19 December , 2009, 11:06:53 AM »
Eccomi Afazio,
 in merito al punto a) anche io la penso come te. In un megaciclo non si può chiedere cosa fare all'utente => si scarta il cerchio. In merito al punto c) condivido il target dell'ultimo punto che indichi: un contur con i coefficienti di sicurezza in funzione del centro del cerchio (tipo quello colorato che hai postato per le isobare sotto la fondazione). Pagherebbe l'occhio istantaneamente.

Ciao.
ing. FERRARI Alberto - www.ferrarialberto.it

Offline IngTinda

  • Semi Esperto
  • **
  • Posts: 86
  • Karma: 1
  • Neo - Laureato
Re: Una funzione per la stabilità dei pendii
« Reply #93 on: 19 December , 2009, 11:07:55 AM »
Anche se non scrivo, hai coinvolto anche me.
aspetto con ansia i nuovi messaggi.
complimenti  :clap:

si, la cosa sta divenendo MOLTO interessante. Da bravo pivellino della programmazione quale sono, non avrei mai compreso l'esistenza di tutti questi problemi per una funzione che usiamo tutti i giorni in geotecnica, all'apparenza banale, bravo a fazio :clap:
Ingegneria nuove gravemente alla salute!

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #94 on: 20 December , 2009, 15:54:54 PM »
Per riuscire a determinare tutte le intersezioni con tutte le polilinee ho dovuto apportare delle modifiche alla funzione interseca_poly1, che adesso vi descrivo.

La prima modifica apportata e' stata quella della determinazione delle intersezioni anche nel caso di segmento verticale della polilinea.
Questa e' consistita nell'inserimento di una serei di if aventi come argomento l'uguaglianza delle ascisse xi ed xf

IF xi=xf

In questo caso abbiamo:
equazione del cerchio, al solito.
equazione della retta: x=xi

sostituendo questìultima nella equazione del cerchio otteniamo una equazione di secondo grado, stavolta in y

y² + B*y + (C + A*xi + xi²)

in cui A B e C sono quelli gia definiti nel caso precedente

Anche qui si ricava il discriminante e se positivo si procede con la verifica se il segmento  yi, yf e' interno o no al segmento y1 y2, in cui y1 e y2 sono le soluzioni della equazone di secondo grado.

La seconda modifica e' quella di avere inserito un contatore delle intersezioni ( Dim n_intersezioni As Integer ) che si incrementerà ad ogni intersezione trovata.
Per salvare le coordinate dei punti di intersezioni, che a questo punto pososno essere piu' di due, servivano dei vettori che si ridimensionassero al variare del numero di intersezioni:
                    ReDim Preserve xx(1 To n_intersezioni)
                    ReDim Preserve yy(1 To n_intersezioni)
la parola chiave Preserve e' necessaria per non perdere nel ridimensionamento, i punti gia registrati.

Infine, affinche la funzione potesse restituirmi uno qualsiasi degli n punti trovati, ho dovuto aggiungere un ulteriore flag, che ho chiamato con flag_punto che rappresenta l'indice delpunto che voglio restituito

I valori che puo' assumere il falg principale sono:
-1: se voglio sapere se vi sono o meno delle intersezioni
0: se voglio sapere il numero delle intersezioni trovate
1: se voglio l'ascissa del punto il cui indice e' flag_punto
2: se voglio l'ordinata del punto il cui indice e' flag_punto

mentre il flag_punto e' un numero intero che mi indica l'indice del punto di cui voglio le coordinate

Ovviamente nel caso in cui viene passato un flag principale pari a -1 o 0, il valore di flag_punto e' ininfluente.
Code: [Select]

Public Function interseca_poly1(tabella As Range, xc As Double, yc As Double, R As Double, flag As Integer, flag_punto As Integer) As Variant

' la funzione calcola le intersezioni tra una polilinea ed un cerchio
' in input:
' tabella: il range di celle contenente le coordinate dei punti. Nella prima colonna le ascisse
'           nella seconda colonna le ordinate
' xc, yc, R: rispettivamente le coordinate del centro del cerchio ed il suo raggio
' flag: parametro che determina il valore che la funzione deve ritornare secondo la tabella che segue
'   -1 : ritorna il valore logico vero se vi sono intersezioni, falso se non ve ne sono
'   0 : ritorna il numero delle intersezioni trovate
'   1 : ritorna l'ascissa del punto di intersezione indicato con flag_punto
'   2 : ritorna l'ordinata
' flag_punto: parametro che indica il punto di intersezione per il quale si vogliono le coordinate

Dim nPunti As Integer
Dim xx() As Double
Dim yy() As Double
Dim count As Integer
Dim esiste_intersez As Boolean
Dim n_intersezioni As Integer
Dim x1 As Double
Dim y1 As Double
Dim x2 As Double
Dim y2 As Double


nPunti = tabella.Rows.count ' leggo il numero di punti della polilinea
ReDim coord(1 To nPunti, 1 To 2) As Double

' trasferisco la tabella delle coordinate nella matrice coord
For count = 1 To nPunti
    coord(count, 1) = tabella.Cells(count, 1)
    coord(count, 2) = tabella.Cells(count, 2)
Next

' eseguo adesso la ricerca delle intersezioni per ciascun segmento della polilinea
n_intersezioni = 0
esiste_intersez = False

For count = 2 To nPunti
    xi = coord(count - 1, 1)
    yi = coord(count - 1, 2)
    xf = coord(count, 1)
    yf = coord(count, 2)
    A = -2 * xc
    B = -2 * yc
    c = xc ^ 2 + yc ^ 2 - R ^ 2
    If xi = xf Then
        a1 = 1
        b1 = B
        c1 = c + A * xi + xi ^ 2
    Else
        m = (yf - yi) / (xf - xi)
        n = yi - m * xi
        a1 = m ^ 2 + 1
        b1 = 2 * m * n + A + B * m
        c1 = n ^ 2 + B * n + c
    End If
    d = b1 ^ 2 - 4 * a1 * c1
 
    If d > 0 Then
        If xi = xf Then
            x1 = xi
            x2 = xi
            y1 = (-b1 - d ^ 0.5) / (2 * a1)
            y2 = (-b1 + d ^ 0.5) / (2 * a1)
        Else
            x1 = (-b1 - d ^ 0.5) / (2 * a1)
            x2 = (-b1 + d ^ 0.5) / (2 * a1)
            y1 = m * x1 + n
            y2 = m * x2 + n
        End If
       
        If xi = xf Then
            If Not (yf < y1 Or yi > y2) Then
                ' vi sono intersezioni
                If yi <= y1 And yf < y2 Then
                    'una intersezione data dal primo punto
                    esiste_intersez = True
                    n_intersezioni = n_intersezioni + 1
                    ReDim Preserve xx(1 To n_intersezioni)
                    ReDim Preserve yy(1 To n_intersezioni)
                    xx(n_intersezioni) = x1
                    yy(n_intersezioni) = y1
                End If
           
                If yi <= y1 And yf >= y2 Then
                    ' due intersezioni
                    esiste_intersez = True
                    n_intersezioni = n_intersezioni + 1
                    ReDim Preserve xx(1 To n_intersezioni)
                    ReDim Preserve yy(1 To n_intersezioni)
                    xx(n_intersezioni) = x1
                    yy(n_intersezioni) = y1
                   
                    n_intersezioni = n_intersezioni + 1
                    ReDim Preserve xx(1 To n_intersezioni)
                    ReDim Preserve yy(1 To n_intersezioni)
                    xx(n_intersezioni) = x2
                    yy(n_intersezioni) = y2
                End If
           
                If yi > y1 And yf < y2 Then
                    ' nessuna intersezione
                End If
           
                If yi > y1 And yf >= x2 Then
                    ' una intersezione
                    esiste_intersez = True
                    n_intersezioni = n_intersezioni + 1
                    ReDim Preserve xx(1 To n_intersezioni)
                    ReDim Preserve yy(1 To n_intersezioni)
                    xx(n_intersezioni) = x2
                    yy(n_intersezioni) = y2
                End If
            End If
       
        Else
        '-----
            If Not (xf < x1 Or xi > x2) Then
                ' vi sono intersezioni
           
                If xi <= x1 And xf < x2 Then
                    'una intersezione data dal primo punto
                    esiste_intersez = True
                    n_intersezioni = n_intersezioni + 1
                    ReDim Preserve xx(1 To n_intersezioni)
                    ReDim Preserve yy(1 To n_intersezioni)
                    xx(n_intersezioni) = x1
                    yy(n_intersezioni) = y1
                End If
           
                If xi <= x1 And xf >= x2 Then
                    ' due intersezioni
                    esiste_intersez = True
                    n_intersezioni = n_intersezioni + 1
                    ReDim Preserve xx(1 To n_intersezioni)
                    ReDim Preserve yy(1 To n_intersezioni)
                    xx(n_intersezioni) = x1
                    yy(n_intersezioni) = y1
                   
                    n_intersezioni = n_intersezioni + 1
                    ReDim Preserve xx(1 To n_intersezioni)
                    ReDim Preserve yy(1 To n_intersezioni)
                    xx(n_intersezioni) = x2
                    yy(n_intersezioni) = y2
                End If
           
                If xi > x1 And xf < x2 Then
                    ' nessuna intersezione
                End If
           
                If xi > x1 And xf >= x2 Then
                    ' una intersezione
                    esiste_intersez = True
                    n_intersezioni = n_intersezioni + 1
                    ReDim Preserve xx(1 To n_intersezioni)
                    ReDim Preserve yy(1 To n_intersezioni)
                    xx(n_intersezioni) = x2
                    yy(n_intersezioni) = y2
                End If
            End If
        End If
        '-----
       
       
    End If
Next

Select Case flag
    Case -1
        interseca_poly1 = esiste_intersez
    Case 0
        interseca_poly1 = n_intersezioni
    Case 1
        If flag_punto <= n_intersezioni And esiste_intersez Then
            interseca_poly1 = xx(flag_punto)
        Else
            interseca_poly1 = "ND"
        End If
    Case 2
        If flag_punto <= n_intersezioni And esiste_intersez Then
            interseca_poly1 = yy(flag_punto)
        Else
            interseca_poly1 = "ND"
        End If
 
    Case Else
        interseca_poly1 = "ERRORE NEL FLAG"
End Select


End Function



Adesso, notando che buona parte del codice e' duplicato, conviene scrivere una funzione che sostituisca una volta per tutte il codice duplicato. ma questa e' cosa che puo farsi in seguito.
« Last Edit: 20 December , 2009, 20:44:25 PM by afazio »

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #95 on: 20 December , 2009, 16:09:18 PM »
A questo punto arrivato, fatte salve le modifiche ed aggiustamenti di quanto già scritto per esigenze che possono sopraggiungere nel seguito, il prossimo passo da sviluppare e' quello della suddivisione in conci del pendio.
Si tratta di stilare una tabella delle ascisse di tutte le verticali che suddivideranno la parte di pendio che ricade entro il cerchio.
Il punto da cui partire e' quello di definire le caratteristiche di questa tabella. Io ho pensato alle seguenti:
- l'ascissa iniziale deve essere il primo punto di intersezione del cerchio col profilo topografico
- l'ascissa finale deve essere il secondo ed ultimo punto di intersezione del cerchio col profilo topografico e nel caso in cui vi fossero piu di due punti di intersezione la tabella deve essere composta da sole due righe entrambi con ascissa nulla
-deve essere considerato ogni vertice del profilo che si trova internamente al cerchio
- devono essere considerati tutti i punti di intersezione delle superfici di separazione degli strati
-deve essere considerato ogni vertice delle superfici di separazione che si trovano internamente ai corrispondenti punti di intersezione
- infine devono aggiungersi ulteriori ascisse in quei tratti in cui la suddivisione risulta maggiore di un passo massimo che avremo fissato.


Penso di fare tutto questo ricorrendo ad una sub anzichè ad una function.
Chi invece cercherà di tradurre questo codice per fare una applicazione autonoma, penso dovrà inserire questa parte nel corpo del programma.
« Last Edit: 20 December , 2009, 20:43:22 PM by afazio »

Offline ferrarialberto

  • Semi Esperto
  • **
  • Posts: 137
  • Karma: 26
Re: Una funzione per la stabilità dei pendii
« Reply #96 on: 20 December , 2009, 16:14:37 PM »
Bene, inizia la fase 2. Da parte mia nessuna osservazione particolare.

Ciao.
ing. FERRARI Alberto - www.ferrarialberto.it

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #97 on: 20 December , 2009, 20:39:21 PM »
Bene, inizia la fase 2. Da parte mia nessuna osservazione particolare.

Ciao.

e no!
saremmo alla fase 3.
Non scordarti la prima funzione che calcola area sviluppo di base e tangente.

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #98 on: 20 December , 2009, 23:06:56 PM »
Ho iniziato la terza fase. Troverete il file in avanzamento da qualche parte in questo sito appena gil lo avrà approvato.
Non chiedetemi dove lo troverete perche non ci ho capito proprio un tubo.

il codice:

Code: [Select]
Sub suddivisione()

Dim count As Integer
Dim i As Integer
Dim conta_ascisse As Integer
Dim conta_aggiunte As Integer

Dim x_iniz As Double
Dim x_finale As Double
Dim x As Double ' variabile di appoggio
Dim doppione As Boolean
Dim dxmax As Double
Dim dx As Double ' variabile di appoggio
Dim ndx As Integer ' variabile di appoggio

Dim n_vert_terreno As Double
Dim n_vert_str1 As Double
Dim n_intersez_Str1 As Double
Dim XX() As Double
Dim xx1() As Double


n_vert_terreno = Range("n_vert_t").Value
n_vert_str1 = Range("n_vert_STR1").Value
n_intersez_Str1 = Range("n_int_STR1").Value
conta_ascisse = 2 + n_intersez_Str1

ReDim Preserve XX(1 To conta_ascisse) As Double

x_iniz = Range(" Tab_intersez_T").Cells(1, 1)
x_finale = Range(" Tab_intersez_T").Cells(2, 1)
dxmax = Range("dx_max").Value

' cancello il contenuto della tabella ascisse conci
For count = 1 To Range("ascisse_conci").Rows.count
    Range("ascisse_conci").Cells(count) = 0
Next

' inserisco nel vettore xx le coordinate diintersezione del terreno
' e quelle con la superficie di separazione dello strato
XX(1) = x_iniz
XX(2) = x_finale
For count = 1 To n_intersez_Str1
    XX(2 + count) = Range("Tab_intersez_sTr1").Cells(count, 1)
Next

' adesso scansiono tra le ascisse del profilo quelle che sono maggiori di x_iniz e minori di xfinale

For count = 1 To n_vert_terreno
    x = Range("Coordinate_profilo").Cells(count, 1).Value
    If x > x_iniz And x < x_finale Then
        'controllo che l'ascissa non sia gia presente, se assente incremento
        ' il contatore e la aggiumgo al vettore
        doppione = False
        For i = 1 To conta_ascisse
            If x = XX(i) Then doppione = True
        Next
        If Not (doppione) Then
            conta_ascisse = conta_ascisse + 1
            ReDim Preserve XX(1 To conta_ascisse)
            XX(conta_ascisse) = x
            doppione = False
        End If
    End If
Next

' adesso scansiono tra le ascisse dello strato quelle che sono maggiori di x_iniz e minori di xfinale
For count = 1 To n_vert_str1
    x = Range("coord_1").Cells(count, 1).Value
    If x > x_iniz And x < x_finale Then
        'controllo che l'ascissa non sia gia presente, se assente incremento
        ' il contatore e la aggiumgo al vettore
        doppione = False
        For i = 1 To conta_ascisse
            If x = XX(i) Then doppione = True
        Next
        If Not (doppione) Then
            conta_ascisse = conta_ascisse + 1
            ReDim Preserve XX(1 To conta_ascisse)
            XX(conta_ascisse) = x
            doppione = False
        End If
    End If
Next

' ordino il vettore xx
Call Ordina(XX)
' inserisco ascisse in quei tratti maggiori di dx_max
conta_aggiunte = 0
For count = 2 To conta_ascisse
    dx = XX(count) - XX(count - 1)
    If dx > dxmax Then
        ndx = Int(dx / dxmax)
        For i = 1 To ndx
            conta_aggiunte = conta_aggiunte + 1
            ReDim Preserve xx1(1 To conta_aggiunte)
            xx1(conta_aggiunte) = XX(count) + i * dx / ndx
        Next
    End If
Next
'accodo il vettore xx1 ad xx e riordino nuovamente
ReDim Preserve XX(1 To conta_ascisse + conta_aggiunte)
For i = 1 To conta_aggiunte
    XX(conta_ascisse + i) = xx1(i)
Next
Call Ordina(XX)

' scrivo il vettore sul foglio di calcolo

For count = 1 To conta_ascisse

Range("ascisse_conci").Cells(count) = XX(count)
Next


End Sub


la descrizione di cio' che fa il codice

Intanto occorre sapere che ho attribuito dei nomi ai range del foglio che interessano la sub-routine
inizio col leggere il numero di vertici del profilo terreno, il numero dei vertici del primo (ed unico strato per ora) ed il numero delle intersezioni dello strato
n_vert_terreno = Range("n_vert_t").Value
n_vert_str1 = Range("n_vert_STR1").Value
n_intersez_Str1 = Range("n_int_STR1").Value

quindi inzializzo il contatore delle ascisse dei conci ad un numero pari alel due intersezioni del profilo topografico piu quella dello strato

conta_ascisse = 2 + n_intersez_Str1
e con questa mi fisso la dimensione iniziale del vettore che conterra le ascisse dei conci
ReDim Preserve XX(1 To conta_ascisse) As Double

quindi mi leggo l'ascissa di inizio della suddivisione e l'ascissa di fine ed insieme a queste mi leggo il valore del passo max tra due conci
x_iniz = Range(" Tab_intersez_T").Cells(1, 1)
x_finale = Range(" Tab_intersez_T").Cells(2, 1)
dxmax = Range("dx_max").Value

Pulisco la tabella sul foglio ove depositero' le ascisse
For count = 1 To Range("ascisse_conci").Rows.count
    Range("ascisse_conci").Cells(count) = 0
Next

e quindi inizio a  popolare il vettore delle ascisse dei conci con quelle che abbiamo note e cioè le due ascisse di inzio e fine e tutte le ascisse di intersezione dello strato

XX(1) = x_iniz
XX(2) = x_finale
For count = 1 To n_intersez_Str1
    XX(2 + count) = Range("Tab_intersez_sTr1").Cells(count, 1)
Next

A questo punto non resta che leggere le ascisse del profilo, verificare che si trovino internamente ad x iniziale e finale, verificare che non sia gia presente, quindi ridimensionare il vettore ed aggiungere l'ascissa
Stessa cosa per le ascisse delo strato
la forma e' essenzialmente questa:

For count = 1 To n_vert_terreno
    x = Range("Coordinate_profilo").Cells(count, 1).Value
    If x > x_iniz And x < x_finale Then
        'controllo che l'ascissa non sia gia presente, se assente incremento
        ' il contatore e la aggiungo al vettore
        doppione = False
        For i = 1 To conta_ascisse
            If x = XX(i) Then doppione = True
        Next
        If Not (doppione) Then
            conta_ascisse = conta_ascisse + 1
            ReDim Preserve XX(1 To conta_ascisse)
            XX(conta_ascisse) = x
            doppione = False
        End If
    End If
Next

fatta la stessa cosa col profilo dello strato, adesos mi ritrovo un vettore con ascisse non ordinate. Per potere inserire ulteriori ascisse in funzione del dmax prefissato, mi serve prima ordinare il vettore in modo che per differenza tra due valori successivi possa controllare se il tratto e' maggiore di dmax.
la sub di ordinamento e' banale:
Sub Ordina(XX)

n = UBound(XX)
For i = 1 To n
    For j = i To n
        x = XX(j)
        If XX(i) > x Then
            XX(j) = XX(i)
            XX(i) = x
        End If
    Next j
Next i

End Sub

adesso basta procedere al controllo di ogni tratto e nel caso in cui fosse maggiore di dmax, inserire un numero di ascisse pari all'intero di dx/dxmax. Deposito queste nuove ascisse in un vettore di appoggio che poi accoderò al vettore delle ascisse.
ReDim Preserve XX(1 To conta_ascisse + conta_aggiunte)
For i = 1 To conta_aggiunte
    XX(conta_ascisse + i) = xx1(i)
Next


adesso mi ritrovo il vettore delle ascisse di nuovo non ordinato.
Lo ordino e scrivo i risultati sul foglio





afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #99 on: 20 December , 2009, 23:45:06 PM »
Al codice precedente occorre apportare la seguente correzione

conta_aggiunte = 0
For count = 2 To conta_ascisse
    dx = XX(count) - XX(count - 1)
    If dx > dxmax Then
          ndx = Int(dx / dxmax) + 1
          For i = 1 To ndx
                conta_aggiunte = conta_aggiunte + 1
                ReDim Preserve xx1(1 To conta_aggiunte)
                xx1(conta_aggiunte) = XX(count - 1) + i * dx / ndx
          Next
    End If
Next


Se non sapete come fare la troverete nel prossimo file in avanzamento insieme alla rappresentazione grafica dei conci che per adesso non c'e'.

saluti

zax2010

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #100 on: 21 December , 2009, 08:18:23 AM »
Afazio mi scuserà se intervengo "a capocchia".
Forse era già stato detto, nel qual caso me lo sono perso.
La funzione concio gestisce una situazione del genere?



Perchè immagino che le forze che "trattengono" il concio nella sua posizione siano differenti in funzione dello strato attraversato dalla superficie di rottura.
Forse era già stato detto che per evitare questa situazione la suddivisione in conci doveva tenere conto di questo aspetto. Nel qual caso mi scuso.

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #101 on: 21 December , 2009, 08:58:30 AM »
Afazio mi scuserà se intervengo "a capocchia".
Forse era già stato detto, nel qual caso me lo sono perso.
La funzione concio gestisce una situazione del genere?



Perchè immagino che le forze che "trattengono" il concio nella sua posizione siano differenti in funzione dello strato attraversato dalla superficie di rottura.
Forse era già stato detto che per evitare questa situazione la suddivisione in conci doveva tenere conto di questo aspetto. Nel qual caso mi scuso.

Inizialmente era mia intenzione fargliela gestire, poi viste le enormi difficoltà connesse con questo problema, ho abbandonato l'idea pensando di passare alla funzione anche i punti di intersezione del cerchio con tutte le superfici di separazione e tutti i vertici sia della superficie topografica che di tutte le superfici di separazione.

Nel caso d'esempio che hai riportato, alla funzione arriverebbero tre conci come nella seguente immagine:


con questa suddivisione la funzione concio gestisce qualsiasi situazione restituendo valori esatti di A, B ed alfa.

Il problema che hai evidenziato l'ho comunque esplicitato e trattato in uno dei cento post che compongono questo 3d
ciao
« Last Edit: 21 December , 2009, 09:07:02 AM by afazio »

Offline Gilean

  • Administrator
  • Bisnonno Veterano
  • *****
  • Posts: 3292
  • Karma: 202
Re: Una funzione per la stabilità dei pendii
« Reply #102 on: 21 December , 2009, 09:44:50 AM »
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

zax2010

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #103 on: 21 December , 2009, 18:48:16 PM »
Gilean, adesso mi devi dire come ha fatto Afazio a prendere l'immagine che nel mio post è una thumbnail e farla diventare una immagine a grandezza reale.
Come si fa?
Anch'io, anch'io.... ???

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #104 on: 21 December , 2009, 22:38:39 PM »
eccomi con altro aggiornamento del foglio
Prego Gilean di approvare la versione 4 ed eliminare la prima versione mantenendo la penultima.
Qui ho apportato varie modifiche alla funzione di suddivisione in conci, poichè ho riscontrato che malgrado tutti i miei accorgimenti per evitare ascise duplicate la tabella delle ascisse dei conci continuava a riportare ascisse doppioni.
Ho aggiunto due funzioni: una che per fissata ascissa x mi determina l'ordinata del punto di intersezione con il cerchio e l'altra che per fissata ascissa mi determina l'ordinata del punto di intersezione con la superficie topografica.
Queste due coordinate insieme alla ascissa mi servono per disegnare il concio.
Ho inserito le verticali dei conci nel grafico fermandomi per adesso a 40 (mi ero stancato di inserirne altre).
Ho imposto dei limiti al numero dei vertici in input sia per il profilo topografico che per la superficie di separazione tra gli strati.
La parte grafica geometrica e' quasi terminata, resta ancora la definizione della maglia dei centri, la definizione dei parametri geotecnici e poi si dovrebbe passare alla parte geotecnica.

Le convenzioni sul foglio, per chi volesse fare delle prove alla ricerca di un qualche bug, sono sempre le stesse: celle di input su sfondo verdino, mentre tutte le altre contengono formule o i richiami delle varie funzione finora scritte.
Il procedimento e':
- input delle cordinate dei vertici (il numero di ordine si aggiorna automaticamente)
- input dei vertici della superficiedi separazione ( anche qui il numero di ordine si aggiorna automaticamente)
- input dei dati del cerchio
- lettura dei limiti del grafico ed inserimento manuale della quota di partenza delle ordinate
- input del passo massimo di suddivisione in conci
- premere quindi il bottone "suddividi"
- controllare che il numero delle ascisse dei conci non superi 100 e quindi visualizzare il grafico mediante pressione del tasto "vedi grafico"
- se e' il caso aggiustare manualmente i limiti del grafico
Divertitevi anche a vedere le formule contenute nelle celle

saluti
« Last Edit: 21 December , 2009, 22:42:07 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