Curva con punti di diverso grado, vettore nodi

Esiste un modo per avere (o editare) punti di grado diverso all’interno della stessa curva?
Inoltre non ho capito se i Knot Vectors, hanno qualche utilità nella modellazione (e come funzionano).

Grazie in anticipo, saluti a tutti! :tada:

credo che quello che vuoi fare non sia possibile, per lo meno in rhino quando inizi una curva con un grado lo puoi anche cambiare, ma converti anche i punti precedenti al nuovo grado.

edit:
potresti cambiare il peso per i punti che ti interessano, il grado rimane invariato ma il risultato cambia.

Probabilmente non ho capito la domanda, ma il grado è una caratteristica della curva, i punti di controllo (CV) non hanno grado, semmai un peso.

Sono fondamentali per determinare la curva, insieme al grado e ai punti di controllo (con il loro peso).
Con Rhino non si può operare con il vettore dei nodi, non ci sono comandi che ti permettono di gestirlo … scarseggiano pure quelli per visualizzarlo. :wink:
Saprai che un cerchio è una curva di grado due, razionale, caratterizzata da un peso dei CV non uniforme (sennò non sarebbe razionale).
Quelli agli “angoli” hanno peso Sqrt(2)/2.

Fai una prova, disegna un cerchio (_Circle) ed estrai i punti di controllo.
“Ricalcali” con una curva free form (_Curve) di grado due e modifica opportunamente il peso dei CV, come detto sopra.
Invece del cerchio otterrai una schifezza. :grinning:
Ciò che differenzia il cerchio dalla nostra “schifezza” è proprio il vettore dei nodi.
Il cerchio avrà infatti un vettore dei nodi composto solo da nodi con molteplicità due tipo "0,0,1,1,2,2,3,3,4,4,).
La nostra curva invece avrà nodi uniformi, con un vettore dei nodi del tipo (0,1,2,3,4,5,6,7,8,9) … insomma una curva composta da nove knot span alternativamente retti e curvilinei, con continuità di tangenza ma non di curvatura.

5 Mi Piace

Grazie mille!! Vedo che anche con una curva di grado 7 è impossibile arrivare al cerchio o supercerchio.
Dopo che la curva è stata costruita come faccio a cambiare il peso di uno o di tutti i CV?

in rhino, con il comando omonimo :+1:

Trovato! Ci sono anche i decimali fantastico.
Per quanto riguarda i Knot Vectors, vi credo sulla parola :grin:

in assoluto anche con grado 70… ed è il motivo per cui occorre convivere con le curve razionali. Senza di loro non definiresti con esattezza alcuna conica.

2 Mi Piace

Ciao… riallacciandomi a questo vecchio argomento, avrei delle domande (anche fuori contesto) da fare a chi ha voglia e tempo di rispondermi: 1) è possibile conoscere/visualizzare il vettore dei nodi di
una curva/superficie?
2) so che la lunghezza del poligono di controllo di una
curva è identico al dominio: forse è
esso stesso il dominio? Quello che non mi torna è
che se modifico la curva, il dominio
non cambia…vi sono operazioni che possono
cambiarlo?
3) avevo in passato già chiesto del perché, in una curva
chiusa, trovo più punti di
controllo di quelli che mi aspetto e per giunta duplicati:
se non comprendo sta cosa il
caldo mi ucciderà :face_with_thermometer: :hot_face:
Grazie a tutti, attendo vostre gradite risposte… a presto.

1 Mi Piace

Ciao Lorenzo,

Per i nodi posso postare questo vecchio (parecchio vecchio :wink: ) script in VBScript.
Non dovrebbe avere problemi su Windows.
Se ti serve per Mac, dimmelo e provo a ‘tradurlo’ in Python.

sub main
su=rhino.getobject("Curve or Surface ?",12,vbtrue)
if isnull(su) then exit sub
if rhino.issurface(su) then
  degu=rhino.surfacedegree(su,0)
  degv=rhino.surfacedegree(su,1)
  ks=rhino.surfaceknots(su)
  kus=ks(0)
  kvs=ks(1)
  tx="U (deg="&cstr(degu)&")"
  tx=tx&" "&formatnumber(kus(0),3)
  for i=1 to ubound(kus)
    tx=tx&" , "&formatnumber(kus(i),3)
  next
  rhino.print tx
  tx="V (deg="&cstr(degv)&")"
  tx=tx&" "&formatnumber(kvs(0),3)
  for i=1 to ubound(kvs)
    tx=tx&" , "&formatnumber(kvs(i),3)
  next
  rhino.print tx
elseif rhino.iscurve(su) then
  deg=rhino.curvedegree(su)
  kc=rhino.curveknots(su)
  tx="U (deg="&cstr(deg)&")"
  tx=tx&" "&formatnumber(kc(0),3)
  for i=1 to ubound(kc)
    tx=tx&" , "&formatnumber(kc(i),3)
  next
  rhino.print tx
end if
end sub

main

Non e’ una regola. Il dominio puo’ iniziare con qualunque valore e avere qualunque ‘lunghezza’ (valore finale meno valore iniziale) escluso zero, senza che la curva cambi.
Se il dominio corrisponde alla lunghezza del poligono di controllo e’ solo perche’ il comando Rhino (o di altro CAD) che ha definito la curva ha usato questo valore. Se ne usa uno diverso la forma della curva non cambia.
Sui motivi di questa ‘coincidenza’ potremmo chiedere a Giuseppe.

Se non erro questo accade nelle curve periodiche.
Una curva chiusa non periodica dovrebbe avere solo il primo e l’ultimo punti di controllo coincidenti …

Ma per avere maggiori informazioni (e piu’ affidabili) meglio che lasci la parola agli esperti.
Senz’altro Giuseppe, Fabio, Sergio e altri sapranno spiegare meglio di me queste cose … :slight_smile:

Prova il comando List.

1 Mi Piace

Ah, bene !
Un altro script ‘confermato’. :grinning:

1 Mi Piace

Ti ha già risposto Emilio.
Nelle ultime versioni di Rhino si è deciso di fare coincidere il dominio con la lunghezza del poligono di controllo.
Andando indietro nel tempo, mi pare fino alla versione 4, invece la parametrizzazione andava sempre da 0 a 1.
Puoi cambiare il dominio come vuoi (comando _Reparametrize) e ovviamente la forma della curva non cambia.
Lunghezza geometrica e lunghezza parametrica sono indipendenti.

ciao Fabio, ne approfitto per chiedere se sia possibile cambiare il dominio di una curva “in Rhino”
senza usare il comando Riparametrizza?

Emilio anch’io ho fatto vari script senza sapere che esistevano già comandi specifici :smiley:

grazie a tutti… il comando LIST l’avevo scoperto tanto tempo fa ma non gli avevo dato peso soprattutto perché, ai tempi, non mi era ancora chiaro il significato “vettore dei nodi” (non che ora lo sia perfettamente :smile: :innocent:) perciò fatevi pure avanti con tutte le spiegazioni possibili… sono assetato :face_with_hand_over_mouth: :hugs:

1 Mi Piace

Ciao Lorenzo.
Per quel poco che ci capisco:

possiamo avere una curva chiusa dove semplicemente il primo e l’ultimo punto coincidono.
In questo caso avremo una curva clamped dove, in sostanza, la molteplicità del primo e dell’ultimo knot è piena (pari al grado della curva).
Troveremo un CV duplicato.
Il seam di questa curva sarà un kink.

Potremmo però anche avere un curva periodica.
Sarà non clamped e il seam non sarà un kink.
Manipolando la curva con i CV, anche sul seam, manterrà una certa continuità dipendente dal grado della curva.
Per ottenere questo occorre pagare un prezzo, avere appunto dei CV duplicati in numero uguale al grado della curva.

O no? :thinking: :thinking: :thinking:

Io conosco solo questo sistema … :blush:

Si’, certo, anch’io … :grinning_face_with_smiling_eyes:

Anche se qui parlavo di una situazione diversa:
quando ti fai uno script perche’ ti serve ma non c’e’ il comando …
E poi, in una versione successiva di Rhino, quel comando appare.
Anche questo mi e’ capitato diverse volte … praticamente per ogni nuova release di Rhino o quasi, a quanto ricordo … :grinning:

1 Mi Piace

Ciao Lorenzo

speriamo che il caldo non abbia avuto la meglio … :joy: :joy: :joy:
Le curve chiuse periodiche non passano per i punti di controllo estremi.
Una curva grado 3 ottenuta attraverso 8 punti avrà punti di controllo:

P6,P0,P1,P2,P3,P4,P5,P6,P0,P1

Si nota che i primi 3 punti e gli ultimi 3 coincidono e pertanto agli estremi
viene garantita la continuità 2 prevista per le curve di grado 3. Analogamente
per una curva di grado 5 con medesimo input:

P5,P6,P0,P1,P2,P3,P4,P5,P6,P0,P1,P2

5 punti coincidenti e pertanto è garantita la continuità 4.

Sergio

2 Mi Piace

Ciao Sergio :slight_smile:

Questa cosa di avere punti duplicati per le curve periodiche mi sembra un po’ una convenzione.
Per costruire la curva sono sufficienti le informazioni date dai CV ‘non duplicati’.
Credo che concettualmente basti, nei calcoli, utilizzare indici dei CV modulari.
Direi anche che non mi sembra necessario che la curva abbia un punto iniziale.
Lista dei CV e lista dei nodi per queste curve li vedo piu’, sempre idealmente, come ‘liste circolari’ …

… O il caldo, dopo Lorenzo, sta aggredendo anche me ? :wink: :grinning_face_with_smiling_eyes:

1 Mi Piace