Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Алгоритм кривой Безье в target-c

Автор вопроса: Justin808Ответов: 2

Может кто-нибудь умнее меня взглянуть на это. Я пытаюсь реализовать алгоритм кривой Безье, который я нашел здесь, в.

Вывод неверный. Я думаю, что преобразовал код правильно, так что либо оригинал был неправильным, либо не был предназначен для использования таким образом... Если я использую встроенный NSBezierPath, кривая выглядит великолепно, но я не могу использовать встроенный NSBezierPath.

Пример NSBezierPath

NSBezierPath *bezierPath = [[NSBezierPath alloc] init];
[bezierPath setLineWidth:1.0f];
[bezierPath moveToPoint:NSMakePoint(x1, y1)];
[bezierPath curveToPoint:NSMakePoint(x4, y4) controlPoint1:NSMakePoint(x2, y2) controlPoint2:NSMakePoint(x3, y3)];

Мой код пытается нарисовать кривую Безье

- (void)drawBezierFrom:(NSPoint)from to:(NSPoint)to controlA:(NSPoint)a controlB:(NSPoint)b color:(NSUInteger)color
{
    float qx, qy;
    float q1, q2, q3, q4;
    int plotx, ploty;
    float t = 0.0;

    while (t <= 1)
    {
        q1 = t*t*t*-1 + t*t*3 + t*-3 + 1;
        q2 = t*t*t*3 + t*t*-6 + t*3;
        q3 = t*t*t*-3 + t*t*3;
        q4 = t*t*t;

        qx = q1*from.x + q2*to.x * q3*a.x + q4*b.x;
        qy = q1*from.y + q2*to.y * q3*a.y + q4*b.y;

        plotx = round(qx);
        ploty = round(qy);

        [self drawPixelColor:color atX:plotx y:ploty];

        t = t + 0.003;
    }
}

Редактировать

См. Алгоритм кривой Безье в target-c нуждается в настройке для завершенного функционального метода кривой Безье.

objective-cbezier

Ответы

Ответ 1 · рейтинг 4 · dman

Я использовал эту функцию Безье с моим xy-плоттером и обнаружил небольшую ошибку с "до". to.x to.y и b.x b.y нужно поменять местами, чтобы ручка начиналась с from и заканчивалась на to.

qx = q1*from.x + q2*a.x + q3*b.x + q4*to.x;
qy = q1*from.y + q2*a.y + q3*b.y + q4*to.y;

Ответ 2 · рейтинг 2 · user1118321

Мне кажется, что у вас неправильные коэффициенты с каждым пунктом, и что одно из ваших добавлений стало кратным. Я думаю, что вы хотите это:

    qx = q1*from.x + q2*a.x + q3*to.x + q4*b.x;
    qy = q1*from.y + q2*a.y + q3*to.y + q4*b.y;

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы