Pregunta

Estoy haciendo un trabajo TTF para MOSA (el cuerpo correlación entre todos los sistemas operativos # C). Yo y Colin quemadura está trabajando actualmente en conseguir un cierto código TTF de trabajo. (Menos de mí en estos días :) - se hicieron muchos progresos)

En cualquier caso, la especificación TTF permite una cantidad arbitraria de puntos de control entre los 'asas' y jadeo NO maneja en absoluto (el TTF tiene un ejemplo de un círculo que demuestra que - bien hecho idiotas - guardó 10 bytes)

.

Puede alguien darme un puntero sobre cómo esto se podría hacer? Miré el artículo Bezier en la Wikipedia, pero no era realmente mucho ayuda - que muestran que esto ocurra, pero no dan ninguna matemáticas. 'Programa' algo listo ayudaría (mi cálculo no es lo que debería ser.) - algunos pseudocódigo o algo

Gracias chicos.

¿Fue útil?

Solución

Hice algo de investigación y encontró algunas algoritmos para el TTF spec más en este sitio por aquí .

Otros consejos

Desde el Bezier artículo en Wikipedia, con un poco de conocimiento práctico de cálculo, se puede traducir la fórmulas a un programa de ordenador como el siguiente seudo código C # para publicar anuncios. Lo estoy haciendo con spline cuadrática, pero es fácil de traducir a otro.

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

Se podría necesitar algunos ajustes, ya que sólo he hecho esto en Java antes, pero eso es básicamente la misma.

Está bien, parece que los contornos TTF se definen como b-splines cuadráticas.

Hay dos algoritmos que usted querrá estar familiarizado.

El primero es la extracción de Bezier a través de la inserción nudo. Esto le dará segmentos de Bézier cuadráticas. A continuación, usted querrá grados elevar cada segmento de curva para obtener cúbicas.

La referencia principal que utilizo es mi texto de la clase CAGD, que es en línea. la extracción de Bezier se cubre en la sección 6.3 . elevación del grado de las curvas de Bézier se cubre en la sección 2.4 . Déjeme saber si usted tiene algún problema ..

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top