Algoritmo per trovare il centro di una curva di Bezier


8

Devo trovare il centro di una curva di Bezier per ruotarla. Ho un elenco di tutti i punti (punti di controllo, inizio e fine, tutti i punti sulla curva stessa). Come farei per trovare il suo centro?


4
Le curve sono entità matematiche che non hanno centri in quanto tali. Tuttavia, potresti cercare il centro del bouding box, il centro del riquadro di delimitazione minimo, il baricentro dell'area chiusa sottostante la curva quando gli endpoint sono collegati, il baricentro dei poligonatori chiusi, il punto medio della curva, la media del punto di controllo, ecc.
joojaa

1
@joojaa ci sono sicuramente 2 centri naturali a cui riesco a pensare, uno è il t=0.5punto. e due è il punto medio geometrico relativo alla distanza cartesiana di viaggio lungo la linea.
v.oddou,

1
@ v. sì sì, in effetti ce ne sono molti altri per cui la domanda necessita di chiarimenti. Tutte le applicazioni vettoriali che ho usato (Illustrator, xara, corel, sketch, ecc.) Usa il centro del riquadro di delimitazione locale per ruotare gli oggetti, quindi è raro vedere le altre definizioni del centro utilizzate.
joojaa,

Risposte:


14

Le curve di Bézier sono entità matematiche e non hanno un centro chiaramente definito. Si può infatti definire molte cose diverse come il centro della curva di Bézier. Ho provato a descrivere alcuni dei possibili centri nell'immagine 1. Più di questo esistono.

inserisci qui la descrizione dell'immagine

Immagine 1 : alcuni dei possibili centri di una curva di Bézier a campata singola

In pratica quasi tutte le applicazioni grafiche orientate al disegno utilizzano il centro del riquadro di selezione locale (BB) come centro. I software di animazione di solito hanno un concetto aggiuntivo di pivot, quindi usano l'approccio ask user, se non viene immesso alcun input, spesso ritornano al centro BB o semplicemente al centro di coordinate locale. Questo probabilmente perché il BB deve essere calcolato comunque e ottenere il suo centro è abbastanza facile da fare (vedi A Primer on Bézier Curves ).

Anche le metriche del baricentro sono in qualche modo naturali soprattutto in un contesto di animazione, sebbene più sgradevole da calcolare. Essere più semplice discretizzare i dati ed eseguire il calcolo sull'input discreto. Ciò ha detto che alcune soluzioni in forma chiusa sono possibili per il baricentro della curva, ma non è un'equazione molto piacevole da formulare e semplificare.

Quindi abbiamo i punti sulla curva: il punto medio per lunghezza dell'arco e il punto in cui il parametro è 0,5. Nella mia mente la param è spesso problematico anche se facile da calcolare, e perde di significato quando si concatenano più Béziers dopo l'altro per un PolyBezier. Il centro della lunghezza ovviamente è naturale solo se la curva non è chiusa.tt

Definiamo anche altri possibili centri, il centro potrebbe essere al centro di gravità della curva dello scafo, la media dei punti di controllo o il centro BB della gabbia di controllo. Anche se in pratica questi non sembrano funzionare molto bene.

Nota : sebbene la curva nella figura 1 mostri il centro BB abbastanza vicino ad alcuni centri naturali, ciò non è sempre il caso di curve più complesse e specialmente di polibeteri.


3
Non lo definirei un commento. La definirei un'ottima risposta che affronta l'attuale livello di conoscenza del richiedente, spiega pienamente perché la domanda è più ampia del previsto e apre la strada a nuove domande.
trichoplax,

@trichoplax potrebbe essere riassunto come "definire il centro" dai meno educati.
maniaco del cricchetto,

@ratchetfreak Preferisco le risposte che provano a identificare il gap di conoscenza del richiedente piuttosto che aspettarsi che comprendano appieno l'argomento che stanno chiedendo.
trichoplax,

Sto cercando un modo per ottenere il DISTANCE MIDPOINT per le mie curve quad e cubiche di Bezier. Stavo usando il valore t 0,5 e come hai detto mi sono appena reso conto che è problematico. Quello che sto cercando di fare ora con il calcolo più bezier è spostare le palle a velocità uniforme. Ma usare il valore t lo rende così difficile .. Penso di dover trovare i valori t adeguati in base alla lunghezza dell'arco. Qualche risorsa o un piccolo suggerimento per me, per favore?
Jenix,

2
Sfortunatamente non esiste una semplice soluzione in forma chiusa generale per Beziers, ma una buona risorsa che copre numericamente questo e altro può essere trovata. Qui difficile che leggo oggi al lavoro una risorsa ancora migliore dovrebbe collegarsi ad esso, ma non ho il link sul mio telefono. Ma forse questo è abbastanza @Jenix
joojaa,

1

Dal momento che non ci viene detto quale definizione di "centro" usare, possiamo anche usare il più semplice. Questo sarebbe

Center=14(P0+P1+P2+P3)
dove P0, P1, P2, P3 sono i punti di controllo della curva.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.