objective-c - 如何确定 NSBezierPaths 在 Cocoa 中是否相交?

标签 objective-c cocoa nsbezierpath

我很难弄清楚如何确定 cocoa 中两个 NSBezierPath 封闭对象的交集。我在网上做了一些研究,但到目前为止找不到答案。

这是我的。 enter image description here

我需要编写某种在所有这些情况下都返回 true 的方法。

到目前为止,我一直在想的是通过使用 bezierPathByFlatteningPath 来展平矩形,然后使用 elementAtIndex: associatedPoints: 将每个元素(作为线段)通过其中的每个点并检查第二个对象(矩形或椭圆)是否包含该点(使用 containsPoint:)。

但是,我不知道如何遍历一个段的所有点...

如果有人有任何可能有帮助的提示或想法,我将不胜感激!

最佳答案

如果你有 2 个贝塞尔路径矩形并且知道它们的每个框架,那么你可以使用 NSIntersectsRect() :

NSRect rect1 = NSMakeRect(20.0, 150.0, 300.0, 100.0);
NSRect rect2 = NSMakeRect(100.0, 100.0, 100.0, 200.0);

[[NSColor redColor] set];

[NSBezierPath strokeRect:rect1];
[NSBezierPath strokeRect:rect2];

BOOL intersects = NSIntersectsRect(rect1, rect2);

NSLog(@"intersects == %@", (intersects ? @"YES" : @"NO"));

产生:

enter image description here

在这种情况下,它会记录 intersects == YES

关于objective-c - 如何确定 NSBezierPaths 在 Cocoa 中是否相交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15578017/

相关文章:

objective-c - sudzc 如何使用 ws 调用返回的对象

ios - 创建连续动画

ios - 如何在 iOS 中将 2 个单声道文件转换为单个立体声文件?

cocoa - 子类化 NSWindow 悬停调整大小

ios4 - iPhone应用程序性能下降但没有任何内存泄漏?

ios - 如何将自动布局 View Controller 渲染为位图?

cocoa - 为 NSView 创建投影 - Cocoa

xcode - 使用 Storyboard更改 NSWindow 大小

cocoa - 使用 NSBezierPath 绘制不同的线宽?

objective-c - NSBezierPath 图