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.

È stato utile?

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 ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top