objective-c – 很难理解NSBezierPath的curveToPoint:方法

objective-c – 很难理解NSBezierPath的curveToPoint:方法,第1张

概述我正试图在 Cocoa中掌握绘制(相当基本的)形状.我理解如何创建具有直边的路径(呃!),但是当谈到做曲线时,我无法理解哪些输入将产生什么形状的曲线.具体来说,我不知道controlPoint1:和controlPoint2:方法的参数如何影响形状. 我正在尝试近似Google Chrome中标签的形状: 我正在使用的代码是: -(void)drawRect:(NSRect)dirtyRect { 我正试图在 Cocoa中掌握绘制(相当基本的)形状.我理解如何创建具有直边的路径(呃!),但是当谈到做曲线时,我无法理解哪些输入将产生什么形状的曲线.具体来说,我不知道controlPoint1:和controlPoint2:方法的参数如何影响形状.

我正在尝试近似Google Chrome中标签的形状:

我正在使用的代码是:

-(voID)drawRect:(NSRect)dirtyRect {    NSSize size = [self bounds].size;    CGfloat height = size.height;    CGfloat wIDth = size.wIDth;    NSBezIErPath *path = [NSBezIErPath bezIErPath];    [path setlinewidth:1];    [path movetoPoint:NSMakePoint(0,0)];    [path curvetoPoint:NSMakePoint(wIDth * 0.1,height)         controlPoint1:NSMakePoint(wIDth * 0.05,height)         controlPoint2:NSMakePoint(wIDth * 0.03,height * 0.05)];    [path linetoPoint:NSMakePoint(wIDth * 0.9,height)];    [path curvetoPoint:NSMakePoint(wIDth,0)         controlPoint1:NSMakePoint(wIDth * 0.95,height)         controlPoint2:NSMakePoint(wIDth * 0.97,height * 0.05)];    [path closePath];    [[NScolor colorWithCalibrateDWhite:0.98 Alpha:1] set];    [path fill];    [[NScolor colorWithCalibrateDWhite:0.6 Alpha:1] set];    [path stroke];}

我失败了.

看,这就是为什么我们不能有好东西:(

任何人都可以给我一些关于绘制曲线时如何思考的指示?绘制此路径的示例也很棒,但实际上它只是理解curvetoPoint的这些输入:controlPoint1:controlPoint2:这让我退缩.

更新|感谢@ Ahruman的回答,我终于开始成型了.它不是100%(缺少底角的曲线,但实际上它至少是对称的形状:)

解决方法 当前绘图点(隐式)和控制点1之间的直线是曲线开始处的切线.控制点2和“到”点之间的直线是曲线末端的切线.这些对应于您在任何带BézIEr路径的矢量绘图应用程序中看到的两个切线控件的末端.如果您还没有使用过,那么Inkscape是免费的. 总结

以上是内存溢出为你收集整理的objective-c – 很难理解NSBezierPath的curveToPoint:方法全部内容,希望文章能够帮你解决objective-c – 很难理解NSBezierPath的curveToPoint:方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1021740.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存