Dubbio sulle Nurbs ( Giuseppe ? )


#1

Ciao

RhinoCommon: Non riesco a capire il testo di documentazione qui:

http://developer.rhino3d.com/api/RhinoCommonWin/html/M_Rhino_Geometry_Collections_NurbsCurveKnotList_CreatePeriodicKnots.htm

Dice:

Compute a clamped, uniform, periodic knot vector based on the current degree and control point count. Does not change values of control vertices.

… E mi confonde. :confused:

A quel poco che so io, un knot vector periodico non dovrebbe essere “clamped” …
Prendo farfalle o la spiegazione non quaglia ?
Tra l’altro, ho fatto una semplice prova su una curva, e mi sembra che i nodi non risultino clamped ( i valori sono tutti diversi )
Inoltre i CV alle estremita’ si spostano (per non cambiare forma alla curva, giustamente), contrariamente a quanto scritto net testo.

Grazie


#2

Ho/avrei pronta una spiegazione ma non vorrei andasse bene per una diversa domanda… :rofl:
Manda l’esempio che hai fatto e vediamo.


#3

Beh, c’e’ sempre da imparare. :slight_smile:

Riprovando ho visto che la faccenda dei CV e’ come scritto: non si spostano …
Non so cosa cavolo avevo visto prima …
Ma questo non dovrebbe entrarci con il tipo di knot vector.
Allego un paio di curve, ma credo che valga per qualsiasi curva

periodic.3dm (27,3 KB)

Qui c’e’ lo scriptino di prova:
seleziona una curva, rende periodico il knot vector
e aggiorna la curva

import Rhino
import scriptcontext

res, obref = Rhino.Input.RhinoGet.GetOneObject( '?', True, Rhino.DocObjects.ObjectType.AnyObject )
cu = obref.Curve().ToNurbsCurve()
ok = cu.Knots.CreatePeriodicKnots( 1.0 )
print( ok )
scriptcontext.doc.Objects.Replace( obref, cu )
scriptcontext.doc.Objects.UnselectAll()
scriptcontext.doc.Views.Redraw()

Ah, per ‘vedere’ i nodi uso questo vetusto script VBS

knotsinfo.rvb (848 Byte)

Ma forse e’ solo un problema di nomi: cos’e’ un knot vector “clamped” ?

Prima di eseguire lo script, la curva presenta nodi ripetuti a inizio e fine
Dopo, non ci sono nodi ripetuti

Il knot vector e’ ancora “clamped” ?
( … E cosa vuol dire ? … :smile: )

Grazie


#4

Pensa Emi che per complicare le cose per molto tempo (e spesso ancora) non c’è stata uniformità nel definire questi termini nemmeno fra gli addetti ai lavori…

Clamped: se non “clampassi” la curva… beh… andrebbe a spasso… :rofl:
In pratica: immagina di lasciare disegnare per nodi un utente e lasciandogli anche stabilire la multiplicity dei nodi… lui/lei clicca in giro sulla vista e…si ritrova con una curva che inizia e finisce in punti non meglio precisati. Clampando stiamo costringendo la curva a passare per il nostro punto di inizio e fine. Per fare questo eleviamo la moltiplicità dei nodi iniziale e finale a “Full” ovvero pari al grado. Uno dei vantaggi collaterali è che la Poligon cage risulta tangente alla curva aperta negli estremi e questo apre la porta ad altri giochi…G1…G2… che tu ben sai.


#5

OK, e’ quello che sapevo anch’io …
Pero’ se eseguo CreatePeriodicKnots() su un knot vector, la curva non passa piu’ per i CV iniziale e finale,
almeno da quello che vedo usando lo scriptino sopra.
Perche’ la documentazione mi dice che il knot vector cosi’ costruito e’ clamped ?

Forse sbaglio qualcosa nell’uso del metodo in questione …

Comunque confermi che un knot vector clamped ha i valori iniziali e finale ripetuti (con molteplicita’ pari al grado) ?


#6

Perchè non ci passi mi sfugge… ma confermo che se è clamped ci deve passare… e per passare deve avere nodi ripetuti a moltiplicità pari al grado.


#7

Perfetto, grazie mille !
Cosa dice la documentazione non importa, o magari non la capsco, ma fa lo stesso.

L’importante e’ sapere come funzionano i knot. :slight_smile:

Ciao !