我对python相当陌生(并且对Python OO来说是全新的),但是我正在处理一个相当复杂的类,我正努力去理解,但是我需要编辑它。为了帮助理解发生了什么,我试图从对象中提取数据,但是我所做的只是返回“地址处的类名对象”。访问Python对象数据
有人能向我解释,我怎么会去印刷,说,在这个对象顶点领域:
class Halfedge(object):
def __init__(self, edge=None, marker=Edge.LEFT):
self.left = None # left Halfedge in the edge list
self.right = None # right Halfedge in the edge list
self.qnext = None # priority queue linked list pointer
self.edge = edge # edge list Edge
self.marker = marker
self.vertex = None # Site()
self.ystar = BIG_FLOAT
def __eq__(self, other):
return self.ystar == other.ystar and \
self.vertex.x == other.vertex.x
def __lt__(self, other):
if self.ystar == other.ystar:
return self.vertex.x < other.vertex.x
else:
return self.ystar < other.ystar
def left_reg(self, default):
if not self.edge:
return default
elif self.marker == Edge.LEFT:
return self.edge.reg[Edge.LEFT]
else:
return self.edge.reg[Edge.RIGHT]
def right_reg(self, default):
if not self.edge:
return default
elif self.marker == Edge.LEFT:
return self.edge.reg[Edge.RIGHT]
else:
return self.edge.reg[Edge.LEFT]
def is_point_right_of(self, point):
"""Returns True if <point> is to right of halfedge.
"""
edge = self.edge
topsite = edge.reg[1]
right_of_site = point.x > topsite.x
if(right_of_site and self.marker == Edge.LEFT):
return True
if(not right_of_site and self.marker == Edge.RIGHT):
return False
if(edge.a == 1.0):
dyp = point.y - topsite.y
dxp = point.x - topsite.x
fast = 0
if ((not right_of_site and edge.b < 0.0) or \
(right_of_site and edge.b >= 0.0)):
above = dyp >= edge.b * dxp
fast = above
else:
above = point.x + point.y * edge.b > edge.c
if(edge.b < 0.0):
above = not above
if (not above):
fast = 1
if (not fast):
dxs = topsite.x - (edge.reg[0]).x
above = (edge.b * (dxp*dxp - dyp*dyp)) < \
(dxs*dyp*(1.0+2.0*dxp/dxs + edge.b*edge.b))
if(edge.b < 0.0):
above = not above
else: # edge.b == 1.0
yl = edge.c - edge.a * point.x
t1 = point.y - yl
t2 = point.x - topsite.x
t3 = yl - topsite.y
above = t1*t1 > t2*t2 + t3*t3
if(self.marker == Edge.LEFT):
return above
else:
return not above
def intersect(self, other):
"""Create a new site where the Halfedges edge1 and edge2 intersect.
"""
edge1 = self.edge
edge2 = other.edge
if (edge1 is None) or (edge2 is None):
return None
# if the two edges bisect the same parent return None
if edge1.reg[1] is edge2.reg[1]:
return None
d = edge1.a * edge2.b - edge1.b * edge2.a
if almost_equal(d, 0.0):
return None
intersect_x = (edge1.c * edge2.b - edge2.c * edge1.b)/d
intersect_y = (edge2.c * edge1.a - edge1.c * edge2.a)/d
if edge1.reg[1] < edge2.reg[1]:
halfedge = self
edge = edge1
else:
halfedge = other
edge = edge2
right_of_site = intersect_x >= edge.reg[1].x
if ((right_of_site and halfedge.marker == Edge.LEFT) or
(not right_of_site and halfedge.marker == Edge.RIGHT)):
return None
# create a new site at the point of intersection - this is a new
# vector event waiting to happen
return Site((intersect_x, intersect_y))
我知道这是很简单的东西,但感谢任何帮助。
编辑:我使用了完整的类,可以发现:
https://bitbucket.org/mozman/geoalg/src/5bbd46fa2270/geoalg/voronoi.py
那么,你到目前为止尝试过什么? – gmlobdell
还有什么“矢量变量”?只有一个“顶点”字段*(不是“变量”)。 – Colleen
对不起,拼写错误,这是我想返回的顶点字段。如果我理解正确,它应该返回,或者成为一个指向一个ooordinate的指针。我将编辑主帖子,以便链接到整个班级。 – djcmm476