NSBezierPath линия истончается - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь нарисовать кривую степенной функции в прямоугольнике 300x300 пикселей, используя NSBezierPath, следующим образом:

-(void)drawPowerCurve:(float)power points:(int)numbPoints{
    NSBezierPath * path = [NSBezierPath bezierPath];
    [path setLineWidth: 1.0];
    [[NSColor colorWithCalibratedRed:0.0 green:0.0 blue:1.0 alpha:1.0] set];

    NSPoint borderOrigin = {35.5,15.5};
    NSPoint endPoint;
    [path moveToPoint:borderOrigin];
    for(int i = 0; i < numbPoints; i++){
        endPoint.x = borderOrigin.x + (300.0/numbPoints)*(i+1);
        endPoint.y = borderOrigin.y + 300.0*pow(((i+1)/(float)numbPoints), power);
        [path lineToPoint:endPoint];
        [path stroke];
        [path moveToPoint:endPoint];
    }
}

Однако кривая уменьшается на верхнем конце по сравнению с нижним концом.Например, power = 1.8 и numbPoints = 50. Кроме того, кривая выглядит не так гладко, как, например, кривые, показанные в утилите Apple ColorSync.Конечно, я не знаю, как они рисуют кривые в ColorSync.Любые идеи о том, как улучшить внешний вид этих кривых (особенно избавиться от утонченности).

Правка - Вот скриншот: enter image description here

1 Ответ

3 голосов
/ 04 апреля 2019

Переместите stroke из цикла, чтобы вы рисовали кривую только один раз вместо numbPoints раз по мере ее роста.Также удалите лишний moveToPoint в цикле, lineToPoint оставляет текущую точку в конце добавленного сегмента.

...