我正在尝试在python中创建一个Point类.我已经有了一些函数,比如__ str__或__ getitem__,它运行得很好.我面临的唯一问题是我的__ setitem__的实现不起作用,其他人都做得很好.
这是我的Point类,最后一个函数是我的__ setitem__:
class point(object):
def __init__(self,x=0,y=0):
self.x=x
self.y=y
def __str__(self):
return "point(%s,%s)"%(self.x,self.y)
def __getitem__(self,item):
return (self.x, self.y)[item]
def __setitem__(self,x,y):
[self.x, self.y][x]=y
Run Code Online (Sandbox Code Playgroud)
它应该像这样工作:
p=point(2,3)
p[0]=1 #sets the x coordinate to 1
p[1]=10 #sets the y coordinate to 10
Run Code Online (Sandbox Code Playgroud)
(我甚至是对的,如果setitem像这样工作吗?)谢谢!
我正在尝试创建一个函数,True如果给定的(x,y)点在凸多边形内,它将返回.我试图使它没有numpy或任何类似的导入,只是纯python代码.
我已经找到了一个示例解决方案,乍一看似乎没问题,但它无法正常工作,我无法弄清楚原因.代码如下:
def point_in_poly(x,y,poly):
n = len(poly)
inside = False
p1x,p1y = poly[0]
for i in range(n+1):
p2x,p2y = poly[i % n]
if y > min(p1y,p2y):
if y <= max(p1y,p2y):
if x <= max(p1x,p2x):
if p1y != p2y:
xints = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x
if p1x == p2x or x <= xints:
inside = not inside
p1x,p1y = p2x,p2y
return inside
Run Code Online (Sandbox Code Playgroud)
如果我测试它为(9,9),对于下面的多边形,它给了我True:
polygon = [(0,10),(10,10),(10,0),(0,0)]
point_x = 9
point_y = 9
print point_in_poly(point_x,point_y,polygon)
Run Code Online (Sandbox Code Playgroud)
但是当我改变多边形点的顺序时,对于同一点,它给了我False:
polygon = [(0,0), …Run Code Online (Sandbox Code Playgroud)