Punti estremi nella curva originaria

David… direi più… :wink:

1 Mi Piace

immagine

immagine

immagine

(NON per riaprire la questione) lo so che questo tipo di argomento se ne parlato molto anche in altri 3d

ma confrontando il metodo indicato da @leopoldomonzani e quello suggerito da @RiccardoMajewski si può notare che il risultato cambia in entrambi i casi in base a quanto si va a dividere la curva:

(le prime due immagini sup e inf a Sx dell’immagine contengono il risultato corretto)

credo che ingenuamente (per lo meno per quanto mi riguarda) nell’uso del metodo di Riccardo si è
dato per scontato che dividere la curva con 1000 punti o 1000 nel parametro t andasse sempre bene

riassumendo se aumentando troppo o troppo poco in entrambe le definizioni si hanno risultati sfalsati.

(spero che possiate controllare anche voi meglio di ciò che dico per confermare o smentire)

ps su alcune curve ho provato inserendo il valore 100 e sembra che ritorni sempre il risultato giusto.
sarebbe bello se ci fosse una correlazione tra la lunghezza della curva è la divisione della curva
ma qui io mi debbo fermare in quanto non ho le competenze e conoscenze opportune come voi.

Hai provato gli stessi casi con il metodo nativo Curve.ExtremeParameters ?
(è quello che hai marcato come soluzione qua )

ciao Riccardo, si infatti dopo tutte le discussioni e soluzioni postate nei vari 3d avevo proprio deciso di utilizzare il metodo da te indicato ma senza la seconda parte quindi quello semplice solo ExtremeParameters

private void RunScript(Curve C, Vector3d V, ref object t)
  {
    double[] T = C.ExtremeParameters(V);
    List<double> T2 = new List<double>();
    foreach(double d in T){
      double a = Rhino.Geometry.Vector3d.VectorAngle(C.TangentAt(d), V);
      if(Math.Abs(a - Math.PI / 2) < this.RhinoDocument.ModelAbsoluteTolerance){
        T2.Add(d);
      }
    }
    t = T2;
  }

essendo che dalle prove fatte sulle curve mi tornava sempre il risultato corretto
c’é un però che mi interessa avere una def che possa usare anche in Rh5
e purtroppo con la versione di Gh in Rh5 non ha quel metodo internamente
quindi ho dovuto fare un passo indietro e rivedere gli altri metodi suggeriti

rileggendo i vari post, Leopoldo indica che col suo metodo non c’erano bisogno di molti punti
e mi sono chiesto se anche col sistema della derivata da te indicata valesse questo ragionamento
e a quanto sembra (da quello che ho postato) pare proprio che sia così.

ripeto su varie prove fatte ho inserito come valore 100 nel suddividere la curva, ed in tutti i casi mi sono ritrovato con i punti corretti quindi per quanto mi riguarda mi va bene, poi nel caso di errore vedo che fare.

in passato mi ero chiesto se in questo caso si potesse usare TangentAt singolarmente, senza ExtremeParameters ma ho trovato esempi in C# e non sono riuscito ad ottenere quello che volevo.