FixedLengthCrvEdit

bungiorno a tutti,


la curva selezionata è quella modificata ripetendo il comando “FixedLengthCrvEdit”
ovviamente entrambe le curve hanno la stessa lunghezza
come potrei ottenere lo stesso risultato
rimanendo la curva uniforme?

in sostanza dovrei io alzare la curva nella parte centrale della distanza che mi interessa
ed gli estremi invece stringersi verso l’interno mantenendo la lunghezza originaria

qualche comando adatto, senza fare script?

L’algoritmo che hanno messo a punto i McNeel è questo. Ci possono essere altre soluzioni. Quindi o si fa uno script ad hoc o si va per tentativi.

Secondo me devi lavorare con la simmetria.
Spezzi la curva al centro, elimini una delle due parti e poi applichi la simmetria oppure fai un mirror con la storia di costruzione.
Modificando la parte centrale della curva originale dovrebbe far spostare tutto mantenendo la simmetria (i due estremi si restringono in ugual modo).
Unica pecca: la probabile formazione di un kink sul punto di congiunzione…

Nell’esempio allegato si vede che due curve geometricamente uguali ma con diversi punti di controllo il risultato ( usando FixedLengthCrvEdit) è molto diverso.
Vittorio

grazier Lucio, infatti ho notato

grazie Vittorio per l’esempio, avevo immaginato che la curva dovesse avere solo tre punti

mi sa che mi tocca un’altro script. a lavoro :wink:

Lucio, Vittorio un saluto e grazie ancora :+1:

ma a proposito di punti:

  1. se uso il comando _Curve è creo una curva con tre punti e attivo _EditPtOn mi ritrovo con tre punti

  2. mentre se uso _InterpCrv inserendo sempre tre punti attivando _EditPtOn me ne ritrovo con 5
    nel secondo esempio o elimino i punti intermedi o eseguo _Rebuild inserendo 2 in entrambe opzioni

non è possibile usare _InterpCrv restituendo direttamente il risultato con solo tre punti?

Ciao Salvio, mi sembra normale.
Se usi la curva interpolata specifichi i punti per i quali vuoi che passi la curva, non i punti di controllo.
Il comando deve quindi collocare i punti di controllo in modo da adattarsi ai punti cliccati e alla parametrizzazione impostata all’esecuzione del comando.

ciao Fabio,

che c’era la spiegazione tecnica ne ero consapevole, anzi se non errò avevo letto tempo fa che vengono aggiunti un punto su entrambi le estremità per la tangenza o una cosa simile

essendo che poi con _Rebuild permette di eliminare i punti aggiunti volevo crearla così direttamente

Ciao Salvio

Ho visto che per ottenere una curva con 3 CV devi impostare Degree=2 e Knots=Uniform.

Per il grado, Curve lo adatta automaticamente: se clicchi 3 punti usa grado 2, e secondo me ha senso.
InterpCrv usa il grado che gli dici, e anche questo mi sembra che abbia senso. :slight_smile:

Per i nodi invece non so perche’ sia necessario settare Uniform …
Anzi, non so neanche che differenze ci siano tra le diverse strategie di parametrizzazione. :confused:
Penso che dovremmo chiedere a @giuseppe

eeee Emilio c’è solo un piccolo problema,
quello che mi dici di fare lo si può fare sulla v6
nella v5 non è consentito impostare il grado a 2
(posso inserire solo numeri dispari 1 o 3 o 5 etc)

per questo ho iniziato il post
con _Rebuild mi converte il grado a 2
ma _InterpCrv non mi fa creare la curva con grado 2

grazie Emilio :+1:

Il numero di punti che viene aggiunto dipende dalla parametrizzazione della curva, potrebbero essere più di due.
Possono anche essere utilizzati per la tangenza ovviamente ma servono sostanzialmente per fare passare la curva per i punti selezionati.
Mi sfugge però una cosa: se hai bisogno di controllare la curva è sicuramente meglio Curve, se invece hai bisogno che la curva passi per determinati punti è meglio InterpCrv … ma se poi la ricostruisci si modifica …

Vero, non me ne ero mai accorto! :grinning:

Ah, OK.
Pero’ se non sbaglio Rebuild funziona bene solo per curve simmetriche.
Se no la curva non passa piu’ dal secondo punto cliccato … giusto ?

Eh … e poi la gente dice che Rhino 6 non fa niente di nuovo …

Solo qualche malalingua. :joy:

1 Mi Piace

Se utilizziamo Rhino 5 … mah.
Forse con GH.
Se la precisione richiesta non e’ molto alta: disegni i 3 punti, piu’ un altro che faccia da CV centrale (a occhio). Poi su GH costruisci una curva dai CV.
Adesso puoi spostare il punto CV centrale su Rhino, cercando di far passare la curva per il punto desiderato.
Certo e’ una cosa da fare a mano, restera’ sempre una piccola distanza.
Dipende se la cosa e’ accettabile o meno.
Se no bisogna fare uno script che sposti il CV centrale finche’ la curva passa per il punto dovuto, data la tolleranza.

EDIT

E comunque, a meno che la curva sia simmetrica, otterrai curve diverse, a seconda della posizione del CV centrale utilizzata … almeno credo. :confused:
Forse le diverse parametrizzazioni servono per questo …

EDIT (2)

Forse con uno slider in GH si riesce ad avere una precisione sufficiente, senza fare script …

Non vedo il problema:
ti disegni la curva della forma che vuoi.
La rebuildi per renderla uniforme
La scali con un fattore di scala pari a Lunghezza voluta/lunghezza rilevata.
Fine

Ciao Emilio

la parametrizzazione uniforme di una B-spline grado 3 (come già sai) è del tipo: 0000123333, vuol dire che la curva b-spline è composta dalle bezier con domini [0;1], [1;2] e [2;3] ovvero con medesima lunghezza del dominio. Immaginando di percorrere con lo stesso numero di passi ogni bezier, se i punti di passaggio sono disposti a distanze simili “la velocità di percorrenza” nel passaggio tra bezier è “simile”. Sempre con impostazione knots=uniform disegnando una curva passante per i punti P0, P1 e P2 con P1 molto vicino a P0, se P2 non è allineato “lo sforzo di svoltare” (leggasi curvatura") si concentra nel primo tratto.
Impostando knots=chord ovvero il vettore dei knots in funzione della distanza tra i punti, l’effetto si attenua.

Dal punto di vista del calcolo matematico è come se la lunghezza del “il passo” di percorrenza delle bezier venisse diviso per la lunghezza del dominio rendendoli uguali

Per comprendere meglio basta disegnarsi un quadrato di riferimento e creare le curve nelle due modalità imponendo il passaggio per i quattro vertici. In questo caso le due curve coincideranno. Ripetendo la stessa procedura ma con riferimento un rettangolo stretto e lungo si noterà la differenza (anche analizzando il grafico della curvatura delle due curve).

Sergio

1 Mi Piace

Ciao Sergio.

Grazie per la spiegazione !

… in effetti avevo notato il problema usando Rebuild su una curva con 3 CV ‘parecchio’ asimmetrica. :slight_smile:

A proposito … che tu sappia c’e’ qualche comando Rhino per modificare la parametrizzazione di curve o superfici ?

Ciao Emilio

non mi sembra, anche perché non è immediato comprendere la modifica dei knots.
Nelle superficie è ancor più macchinoso. Molto più immediato agire sui weights.

1 Mi Piace