Question

Je suis en train de faire des travaux de TTF pour Mosa (le corps en corrélation entre tous les systèmes d'exploitation C #). Moi et Colin brûleraient travaille actuellement sur l'obtention d'un code de travail TTF. (Moins-moi ces jours :) - il a fait beaucoup de progrès)

Dans tous les cas, la spécification TTF permet une quantité arbitraire de points de contrôle entre les « poignées » et halètement NO poignées du tout (la TTF a un exemple d'un cercle le démontrer - bien fait idiots - vous avez enregistré 10 octets)

.

Quelqu'un peut-il me donner un pointeur sur la façon dont cela pourrait se faire? Je regardais l'article Bézier sur Wikipédia mais ça n'a pas vraiment beaucoup d'aide - ils montrent qu'il se passe, mais ne donnent pas de mathématiques. Quelque chose « programme » prêt contribuerait à (mon calcul est pas ce qu'il devrait être.) - une pseudo-code ou quelque chose

Merci les gars.

Était-ce utile?

La solution

Je l'ai fait quelques recherches et trouvé quelques algorithmes pour la TTF spec sur ce site ici .

Autres conseils

De la Bézier article dans wikipedia, avec quelques connaissances de calcul pratique, vous pouvez traduire la formules à un programme informatique comme le pseudo C # code ci-après. Je le fais avec spline quadratique, mais il est facile de traduire dans une autre.

// 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;
}

Il pourrait avoir besoin de quelques ajustements comme je l'ai seulement fait cela en Java avant, mais est essentiellement cela.

D'accord, il semble que les contours de TTF sont définis comme b-splines quadratique.

Il y a deux algorithmes que vous aurez envie de connaître.

La première extraction de Bézier par insertion de noeud. Cela vous obtiendrez des segments Bézier. Ensuite, vous aurez envie de degré élever chaque segment de Bézier pour obtenir cubics.

La principale référence que j'utilise est mon manuel de classe CAGD, qui est en ligne. extraction de Bézier est couvert dans 6,3 . élévation Degré de courbes de Bézier est couvert . Laissez-moi savoir si vous avez des problèmes ..

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top