代码之家  ›  专栏  ›  技术社区  ›  Jim Merkel

nsbezierpath线变细

  •  0
  • Jim Merkel  · 技术社区  · 6 年前

    我尝试使用nsbezierPath在300x300像素矩形中绘制幂函数曲线,如下所示:

    -(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];
        }
    }
    

    但是,与底端相比,曲线在顶端变薄。 例如,功率=1.8,numbpoints=50。 此外,曲线看起来不像苹果的ColorSync实用程序中显示的曲线那样平滑。当然,我不知道他们是如何在ColorSync中绘制曲线的。关于如何改善这些曲线的外观的任何想法(尤其是摆脱这些变薄)。

    编辑——这里是一个屏幕截图: enter image description here

    0 回复  |  直到 6 年前
        1
  •  3
  •   CRD    6 年前

    移动 stroke 在循环之外,因此只绘制一次曲线,而不是 numbPoints 随着时间的增长。同时移除冗余 moveToPoint 在循环中, lineToPoint 将当前点保留在添加段的末尾。