Trasformare un N-ario B-spline in una sequenza di quadratica o cubica B-spline
Domanda
Sto facendo un lavoro TTF per MOSA (il corpo correlazione tra tutti i sistemi operativi # C). Io e Colin bruciare stanno attualmente lavorando su come ottenere un codice TTF lavoro. (Meno me in questi giorni :) - ha fatto un sacco di progressi)
In ogni caso, le specifiche TTF permette una quantità arbitraria di punti di controllo tra le 'maniglie' e sussulto NO maniglie affatto (TTF presenta un esempio di un cerchio dimostrare che - ben fatto idioti - è stato salvato 10 byte)
.Qualcuno può darmi un puntatore su come questo potrebbe essere fatto? Ho guardato l'articolo Bezier su Wikipedia, ma non era poi così grande aiuto - mostrano che ciò accada, ma non danno alcuna matematica. Qualcosa di 'programma' pronto aiuterebbe (il mio Calcolo non è quello che dovrebbe essere) -. Alcuni pseudocodice o qualcosa
Grazie ragazzi.
Soluzione
Ho fatto qualche ricerca e ho trovato un po ' algoritmi per la TTF spec sopra a questo sito qui .
Altri suggerimenti
Bezier articolo in wikipedia, con una certa conoscenza pratica di calcolo, è possibile tradurre il formule per un programma per computer come il seguente pseudo C # codice lista. Lo sto facendo con spline quadratica, ma è facile da tradurre in un altro.
// Quadratic spline, with three given points
// B(t) = (1-t)^2P(0) + 2*tP(1) + t^2P(2)
// where T is a real number in the interval [0, 1]
public void DrawQuadSpline(Point p0, Point p1, Point p2, int steps)
{
Point next = p0;
Point previous = p0;
double tStep = 1 / ((float) steps);
double t = 0;
for (int i = 0; i < steps; i++)
{
float x = CalculateQuadSpline(P0.x, P1.x, P2.x, t);
float y = CalculateQuadSpline(P0.y, P1.y, P2.y, t);
Point next = new Point(x, y);
drawLine(previous, next);
previous = next;
t = t + tStep;
}
}
private void CalculateQuadSpline(float z0, float z1, float z2, float t)
{
return (1.0-t)*(1.0-t)*z0 + 2.0*t*z1 + t*t*z2;
}
Si potrebbe aver bisogno di qualche ritocco come ho fatto solo questo in Java prima, ma questo è fondamentalmente.
D'accordo, sembra contorni TTF sono definiti come secondo grado B-spline.
Ci sono due algoritmi che si vorrà essere a conoscenza.
Il primo è estrazione Bezier mediante inserimento nodo. Questo ti porterà segmenti Bézier quadratica. Allora ti consigliamo di gradi-elevare ogni segmento di Bezier per ottenere cubiche.
Il riferimento principale che uso è la mia classe CAGD libro di testo, che è in linea. estrazione bezier è coperto in 6.3 . elevazione grado di curve di Bezier è coperto in 2.4 . Fatemi sapere se avete problemi ..