Cocoa 和 SVG 解释 Bézier 曲线的方式有什么区别吗?

发布于 2024-08-11 16:05:54 字数 284 浏览 7 评论 0原文

我对任何类型的图形都绝对陌生(也许除了拍照:)),所以如果我对昨晚遇到的问题的解释不是很精确和不稳定,请原谅。

我正在尝试在 Cocoa 中生成代码,该代码将在 SVG 文件的基础上绘制矢量。我已将 SVG 命令转换为 NSBezierPath 方法的调用,但收到的图形不太好...形状与基本形状相似,但有一些...扭曲(?)。这可能既不是抗锯齿的问题,也不是 Cocoa 方面设置的平坦度值的问题。有人建议我这个问题可能是由于 Cocoa 方法和 SVG 对贝塞尔曲线控制点的不同解释造成的 - 这可能吗?或者还有什么可能导致这个问题?

I'm definetely new to any kind of graphics (maybe except taking photos :)) so please forgive if my explanation of problem I faced last night is not very precise and understable.

I'm trying to generate code in Cocoa which would draw vectors on the base of SVG files. I've translated SVG commands into calls of NSBezierPath methods but received graphics is not really good... The shape is similar to the basic one but there are some... distortions(?). It's probably neither an issue of antialiasing nor flatness value set on Cocoa side. I was suggested that the problem may result from different interpretation of control points of Bézier curves by Cocoa methods ang SVG - is that possible? Or what else may cause the problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清风无影 2024-08-18 16:05:54

SVG曲线的命令是控制点、控制点、终点。

Cocoa curveToPoint方法取终点、控制点1、控制点2

SVG curve to command is control point, control point, end point.

Cocoa curveToPoint method takes end point, control point 1, control point 2

还如梦归 2024-08-18 16:05:54

@彼得霍西

当然。目前我认为 Cocoa 和 SVG 的解释确实存在差异。我尝试使用基本的 SVG 示例,但 Cocoa 中的结果有所不同。

SVG 版本:

<path d="M 100 200 C 100,100 400,100 400,200 z"/> 

Cocoa 版本:

path = [[NSBezierPath alloc] init]; 
[path moveToPoint:NSMakePoint(100, 200)]; 
[path curveToPoint:NSMakePoint(100, 100) controlPoint1:NSMakePoint(400, 100) controlPoint2:NSMakePoint(400, 200)]; 
[path sePath]; 

或者这是我无法注意到的愚蠢错误:)

// 由于缺乏代码格式,我没有使用“添加注释”。

@Peter Hosey

Sure. At this moment I supose that there is really difference in Cocoa and SVG interpretations. I tried to use basic SVG examples and result in Cocoa is different.

SVG version:

<path d="M 100 200 C 100,100 400,100 400,200 z"/> 

Cocoa version:

path = [[NSBezierPath alloc] init]; 
[path moveToPoint:NSMakePoint(100, 200)]; 
[path curveToPoint:NSMakePoint(100, 100) controlPoint1:NSMakePoint(400, 100) controlPoint2:NSMakePoint(400, 200)]; 
[path sePath]; 

Or it is my stupid mistake which I can't notice :)

// I'm not using "Add comment" because of lack of code formatting.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文