gpt4 book ai didi

cocoa - CGPathGetBoundingBox 的奇怪行为

转载 作者:行者123 更新时间:2023-12-03 17:39:02 26 4
gpt4 key购买 nike

这个非常简单的代码...

CGPathRef path = CGPathCreateWithEllipseInRect(CGRectMake(-50, -50, 100, 100), NULL);
NSLog(@"Original path bounds = %@", NSStringFromRect(CGPathGetBoundingBox(path)));
CGAffineTransform t = CGAffineTransformMakeRotation(0.75 * M_PI);
CGPathRef tPath = CGPathCreateCopyByTransformingPath(path, &t);
NSLog(@"Transformed path bounds = %@", NSStringFromRect(CGPathGetBoundingBox(tPath)));
CGPathRelease(path);
CGPathRelease(tPath);

...产生以下奇怪的输出:

[...] Original path bounds = {{-50, -50}, {100, 100}}
[...] Transformed path bounds = {{-54.881553646890872, -54.881553646890872}, {109.76310729378174, 109.76310729378174}}

由于它是一个以 (0,0) 为中心的圆,任何旋转是否都不应保留原始边界框?到底为什么边界框会变大?或者这是苹果的一个错误?

最佳答案

这里的问题是 CGPathGetBoundingBox() 函数包含用于构造圆的贝塞尔曲线的控制点。这些控制点位于圆的外部,因此当您旋转圆时,它们自然会出现在原始边界框之外。

解决方案是使用 CGPathGetPathBoundingBox() 函数,该函数在计算路径边界框时包含控制点。

关于cocoa - CGPathGetBoundingBox 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26313553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com