我要做的是创建一个圆,然后删除该圆中所有超出给定键的(整数)点(例如圆和某些几何图形的面积相交)。几何图形表示为(x,y)
元组的列表,圆也是如此(附加的O
变量等于其中心)。我的密码是:
copy=circle
for bound in bounds:
for point in circle:
if checkPointSegmentIntersection(O,point,bound):
copy.remove(point)
print bound, point
print copy
我测试的圆心现在等于(5,8)
,半径等于3。圆的一个边界点是(5,11)
,边界上有一个点等于(5,10)
。所以点(5,11)
和{copy
中删除。(5,10)
有,但是{(5,10) (5,11)
甚至没有出现在输出中,(5,10) (5,10)
却出现了)!内部循环继续使用绑定相等(5,10)
,(5,11)
是唯一省略的点。(5,11)
确实出现在其他外循环迭代中。发生什么事?什么会导致循环忽略其中一个点?在
一点背景知识:这段代码在django服务器上执行,bounds
列表相当大,它包含10-15个元素,我使用的是python2.7。如果checkPointSegmentIntersection(A,B,X)
在A
和{checkPointSegmentIntersection(A,B,X)
函数工作并返回{
谢谢!在
当你认为你在创建列表的副本时,你只是在创建对同一内存空间的另一个引用。相反,您应该使用
circ_copy=circle[:]
这实际上是获取整个
circle
的副本,并将其作为一个新列表存储在circ_copy
中。现在你可以运行你的循环。但是,您的意图是完全正确的,尝试遍历复制列表并对原始列表进行更改。在把事物分开,这样你就有了一个函数
对当前边界的点返回}。在
True
或{然后你可以做一些类似的事情
^{pr2}$相关问题 更多 >
编程相关推荐