小编Joh*_*rry的帖子

用于Point(x,y)类的Python中的__setitem__实现

我正在尝试在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像这样工作吗?)谢谢!

python python-2.7

4
推荐指数
1
解决办法
3万
查看次数

指向凸多边形

我正在尝试创建一个函数,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)

python polygon point-in-polygon

0
推荐指数
1
解决办法
1931
查看次数

标签 统计

python ×2

point-in-polygon ×1

polygon ×1

python-2.7 ×1