gpt4 book ai didi

ios - 为什么 CGPathIsRect 不起作用?为什么 CGPathContainsPoint 不起作用?

转载 作者:行者123 更新时间:2023-11-29 04:50:25 25 4
gpt4 key购买 nike

我正在制作一个 CGPoint 和一个 CGPathRef,然后尝试查找 CGPoint 是否在 CGPathRef 内部。这是代码:

CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 0, 0);
CGPathMoveToPoint(path, NULL, 200, 0);
CGPathMoveToPoint(path, NULL, 200, 200);
CGPathMoveToPoint(path, NULL, 0, 200);
CGPathCloseSubpath(path);

CGPoint hitPoint = CGPointMake(77, 77);

if ( CGPathIsEmpty(path) )
NSLog(@"Path Is Empty!");
else
{
if ( CGPathIsRect(path, NULL) )
NSLog(@"Path is a Rectangle!");
else
{
NSLog(@"Path is NOT a Rectangle!");
if (CGPathContainsPoint(path, NULL, hitPoint, FALSE)) // FALSE or TRUE - same result
NSLog(@"Hit Point Inside: x=%f, y=%f", hitPoint.x, hitPoint.y);
else
NSLog(@"Hit Point Outside: x=%f, y=%f", hitPoint.x, hitPoint.y);
}
}

输出内容为:

Path is NOT a Rectangle!
Hit Point Outside: x=77.000000, y=77.000000

该路径显然是一个矩形,并且该点位于闭合路径内。请告诉我我在这里做错了什么。

最佳答案

CGRectIsPath 仅当路径是由 CGPathCreateWithRect 创建时才返回 true(使用不旋转或倾斜矩形的 transform 参数) ,或者如果路径是由 CGPathCreateMutable 创建的,并且使用 CGPathAddRect 添加了一个矩形。

要确定任意路径是否恰好是矩形,它需要做更多的工作。该路径可能包含实际上是直线的贝塞尔曲线段,或由连续直线段构建的边。

如果您需要检测任意路径是否实际上只是一个矩形,则必须使用 CGPathApply 自己完成。事情会很复杂。

至于为什么你的点内测试不起作用:你需要使用CGPathAddLineToPoint来创建矩形的边:

CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 0, 0);
CGPathAddLineToPoint(path, NULL, 200, 0);
CGPathAddLineToPoint(path, NULL, 200, 200);
CGPathAddLineToPoint(path, NULL, 0, 200);
CGPathCloseSubpath(path);

关于ios - 为什么 CGPathIsRect 不起作用?为什么 CGPathContainsPoint 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8950741/

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