Включите N-арной B-сплайна в последовательность квадратичного или кубического B-сплайнов

голоса
2

Я делаю некоторые TTF работы для МСД (скоррелированным тела между всеми C # операционной системы). Я и Колин Ожог в настоящее время работают над получением какой-TTF код работает (меньше меня в эти дни :) - он сделал большой прогресс).

В любом случае, TTF спецификация позволяет произвольное количество контрольных точек между «ручками» и удушья NO обрабатывает на всем (TTF есть пример круга , демонстрирующий его - молодцы идиоты - вы сохранили 10 байт).

Может кто-нибудь дать мне указатель на то, как это может быть сделано? Я посмотрел на статью Безье в Википедии, но это было не так уж много помощи - они показывают, что это происходит, но не дают никакой математики. «Программа» Что-то готовы поможет (мое Исчисление это не то, что оно должно быть) - некоторые псевдокоды или что-то.

Спасибо, парни.

Задан 10/12/2008 в 07:00
источник пользователем
На других языках...                            


3 ответов

голоса
3

Из статьи Безье в википедии, с некоторыми практическими знаниями исчисления, вы можете перевести формулы к компьютерной программе , как следующий псевдо C # кода листинга. Я делаю это с квадратичным сплайном, но это легко перевести на другой.

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

Это, возможно, потребуется некоторые настройки, как я только сделал это в Java раньше, но в основном это.

Ответил 10/12/2008 в 07:29
источник пользователем

голоса
1

Хорошо, это выглядит как TTF контуры определяются как квадратичные би-сплайны.

Есть два алгоритма, которые вы хотите быть знакомы с.

Первой является извлечение Безье с помощью вставки узла. Это поможет вам квадратичные сегменты Безье. Тогда вы хотите степени-Elevate каждого сегмента Безье, чтобы получить кубики.

Основная ссылка , которую я использую мой класс CAGD учебник, который он - лайн. Добыча Безье покрыта в разделе 6.3 . Степень вертикальной проекции кривых Безье рассматривается в разделе 2.4 . Дайте мне знать , если у вас есть какие - либо проблемы ..

Ответил 10/12/2008 в 21:47
источник пользователем

голоса
1

Я сделал некоторые раскопки и нашел некоторые алгоритмы для TTF спецификации более на этом сайте здесь .

Ответил 10/12/2008 в 08:25
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more