本文整理汇总了Python中region.Region.overlapRegion方法的典型用法代码示例。如果您正苦于以下问题:Python Region.overlapRegion方法的具体用法?Python Region.overlapRegion怎么用?Python Region.overlapRegion使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类region.Region
的用法示例。
在下文中一共展示了Region.overlapRegion方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: intersect
# 需要导入模块: from region import Region [as 别名]
# 或者: from region.Region import overlapRegion [as 别名]
def intersect(self, other, pThresh=0):
"""Determines the intersection point of self and other
Arguments:
other: [Segment] A segment
pThresh: [float] The permitted error when testing for parallel
lines (default: 0)
Returns: [List [Vector]] Empty list for no intersect, one Vector for a
point-intersect, two for a segment-intersect
"""
# Manually handles zero-length lines
if self.len() == 0 or other.len() == 0: return []
# Manually handles point overlaps
if self == other: return [self.p1, self.p2]
if self.p1 == other.p1 or self.p1 == other.p2: return []
if self.p2 == other.p1 or self.p2 == other.p2: return []
# Maps problem to problem of locating other's x-intersect
toMove = self.p1.mul(-1)
toRotate = -1 * self.angle()
s1 = self.copy()
s2 = other.copy()
s1.move(toMove)
s2.move(toMove)
s1.rotate(toRotate)
s2.rotate(toRotate)
# No x-intersect -- s2 does not cross s1's line
if abs(s2.p1.y) > pThresh and numpy.sign(s2.p1.y) == numpy.sign(s2.p2.y):
return []
# Segments are parallel
if abs(s2.p1.y) <= pThresh and abs(s2.p1.y) <= pThresh:
s1region = Region(s1.p1.x, s1.p2.x)
s2region = Region(s2.p1.x, s2.p2.x)
overlap = s1region.overlapRegion(s2region)
if overlap is False:
# No intersection
return []
else:
# Calculates segment of intersection
p1Intersect = fromPolar(overlap.left, self.angle()) \
.add(self.p1)
p2Intersect = fromPolar(overlap.len(), self.angle()) \
.add(p1Intersect)
return [p1Intersect, p2Intersect]
# Calculates the x-intersect
xIntersect = s2.p1.x + (s2.p2.x - s2.p1.x) * (s2.p1.y / (s2.p1.y - s2.p2.y))
if not Region(s1.p1.x, s1.p2.x).contains(xIntersect):
# No x-intersect -- s2 crosses s1's line out of range of s1
return []
# Calculates and returns the intersection point
pIntersect = fromPolar(xIntersect, self.angle()).add(self.p1)
return [pIntersect]