请检查这段代码,看看@Arun R在如何计算覆盖另一个矩形的矩形面积中所说的算法有什么问题
为什么它没有删除其他内部的矩形
cdef class Ray:
cdef public:
Point2D p
Point2D q
list points
cdef class Boundbox:
cdef public:
Point2D minP
Point2D maxP
int componentID
int getComponentID(self):
return self.componentID
def __numeric_compare_by_x(self,Boundbox a,Boundbox b):
cdef Point2D tempA,tempB
tempA=a.minP
tempB=b.minP
return tempA.x-tempB.x
def __numeric_compare_by_y(self,Boundbox a,Boundbox b):
cdef Point2D tempA,tempB
tempA=a.minP
tempB=b.minP
return tempA.y-tempB.y
def isBoundbox_inside(self,b1,b2):
if((b1.minP.x<=b2.minP.x and b1.minP.y<=b2.minP.y)and(b1.maxP.x>=b2.maxP.x and b1.maxP.y>=b2.maxP.y)):
return True
return False
def boundboxFilter(self,boundbox):
cdef:
int i
int minx,miny,maxx,maxy
list pointList=[]
Boundbox p,b1,b2
#for i in xrange(len(boundbox)):
# pointList.append(boundbox[i])
pointList=boundbox
pointList.sort(cmp=self.__numeric_compare_by_x)
stack=[]
stack.append(pointList[0])
for p in pointList[1:]:
top=len(stack)-1
b1=stack[top]
b2=p
if(not(self.isBoundbox_inside(b1,b2))):
stack.append(b2)
pointList=stack
pointList.sort(cmp=self.__numeric_compare_by_y)
stack=[]
stack.append(pointList[0])
for p in pointList[1:]:
top=len(stack)-1
b1=stack[top]
b2=p
if(not(self.isBoundbox_inside(b1,b2))):
stack.append(b2)
return stack
问题出在你的过滤逻辑上。
outsiders = []
for rect in pointList:
if not any(is_inside(rect, box) for box in pointlist if box is not rect):
outsiders.append(rect)
其中,如果
矩形
在盒子
内,则is_inside为真。您需要对照所有其他矩形检查每个矩形,如果它不在其中任何一个矩形中,请保存它。当然,您可以调整它以提高性能。
另一种需要较少比较的方法是考虑整个列表,删除其他列表中的矩形。但是你必须非常小心索引,把东西放在列表中间也很昂贵。
问题内容: 考虑以下功能: 它们应该是等效的。但是存在性能差异: 不带的版本else慢10%。这非常重要。为什么? 问题答案: 对我来说,它们的速度几乎相同:(Debian上的Python 2.6.6) 字节码也非常相似: 唯一的区别是,如果控制到达函数主体的末尾,则else返回包含代码的版本None。
今天我在家里的电脑上安装了netbean,以便在家做一些工作。我安装了java 8 JDK(151),并安装了包含所有内容的netbean(没有进行自定义安装)。然后我把我的项目从github上撤下来。 我的安装文件夹是在E:\netbean我的项目文件夹是默认的c: 我加载了项目,打开XAMPP并运行它。太好了,很管用。 然后我对HTML进行了更改(修复了我犯的一个拼写错误)。再次运行。找不到零
我对java中的JFrames和图形非常陌生。我的长期目标是创建一个RayCast游戏世界。下面的代码是我第一次在jframe中以其坐标移动矩形。当用户按下箭头键时,坐标会发生变化。然而,似乎有些问题,因为当我使用该程序时,矩形只会被绘制并创建一条路径。我想在坐标的位置画一个矩形。 请解释我做错了什么。提前谢谢你帮助我!
您将自动执行著名的歌曲“墙上的99瓶XXX”。你将打印这首歌所有99个诗句的歌词。用循环!如果你不知道歌词,用谷歌查一下。 该方案应: a.如果他们不到21岁,或者他们喜欢苏打水,那么歌词是“墙上有99瓶苏打水” B.如果他们超过21岁,那么是“99瓶啤酒” 您必须使用WHILE循环,并且counter变量必须是print语句的一部分! 所以第一节是: 99瓶苏打水挂在墙上 墙上有98瓶苏打水 最
需要以这种形式解决 没有使用的最后一个字符
我有以下在mongoDB CLI中工作的查询: 下面的问题,我认为是猫鼬的等价物: 使用mongoose调试,我可以看到mongoose转换为的以下查询正在删除数组中所有文档的整个pull操作的后半部分。为什么会这样?