首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检测两个矩形相交的算法?

检测两个矩形相交的算法?
EN

Stack Overflow用户
提问于 2008-09-22 15:15:53
回答 13查看 97.6K关注 0票数 146

我正在寻找一种算法来检测两个矩形是否相交(一个以任意角度,另一个只有垂直线/水平线)。

测试其中一个的一角是否在另一个中几乎是有效的。如果矩形形成类似十字的形状,它将失败。

这似乎是一个好主意,避免使用线的斜率,这将需要垂直线的特殊情况。

EN

回答 13

Stack Overflow用户

发布于 2012-12-14 20:19:14

在Cocoa中,您可以很容易地检测selectedArea矩形是否与您旋转的NSView的框架矩形相交。你甚至不需要计算多边形,法线等等。只需将这些方法添加到NSView子类中即可。例如,用户在NSView的superview上选择一个区域,然后调用传递selectedArea rect的DoesThisRectSelectMe方法。convertRect:接口将完成这项工作。当您单击NSView以将其选中时,也可以使用相同的技巧。在这种情况下,只需覆盖hitTest方法,如下所示。接口convertPoint:将完成这项工作;-)

- (BOOL)DoesThisRectSelectMe:(NSRect)selectedArea
{
    NSRect localArea = [self convertRect:selectedArea fromView:self.superview];

    return NSIntersectsRect(localArea, self.bounds);
}


- (NSView *)hitTest:(NSPoint)aPoint
{
    NSPoint localPoint = [self convertPoint:aPoint fromView:self.superview];
    return NSPointInRect(localPoint, self.bounds) ? self : nil;
}
票数 4
EN

Stack Overflow用户

发布于 2008-09-22 15:23:28

检查一个矩形的任何直线是否与另一个矩形的任何直线相交。简单的线段相交很容易编码。

如果您需要更快的速度,有用于直线段相交(扫描线)的高级算法。请参阅http://en.wikipedia.org/wiki/Line_segment_intersection

票数 2
EN

Stack Overflow用户

发布于 2008-10-15 11:56:25

一种解决方案是使用称为非拟合多边形的东西。这个多边形是从两个多边形计算出来的(概念上是通过围绕另一个多边形滑动),它定义了在给定多边形相对偏移的情况下,多边形重叠的区域。一旦你有了这个NFP,那么你只需要用两个多边形的相对偏移量给出一个点来做一个包含测试。此包含测试既快速又简单,但您必须首先创建NFP。

在web上搜索No Fit Polygon,看看是否可以找到凸面多边形的算法(如果有凹面多边形,就会变得更加复杂)。如果你找不到任何东西,那就发邮件给我: howard dot J dot may gmail dot com

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/115426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档