我有一组基本的笛卡尔坐标,我想用Python操作它们。例如,我有以下框(坐标显示为角):
0,4 --- 4,4
0,0 --- 4,0
我希望能够找到以(0,2)开头并转到(4,2)的行。我是否需要将每个坐标分解为单独的X和Y值然后使用基本数学,或者有没有办法将坐标作为(x,y)对处理?例如,我想说:
New_Row_Start_Coordinate = (0,2) + (0,0)
New_Row_End_Coordinate = New_Row_Start_Coordinate + (0,4)
答案 0 :(得分:5)
听起来你正在寻找一个Point类。这是一个简单的问题:
class Point:
def __init__(self, x, y):
self.x, self.y = x, y
def __str__(self):
return "{}, {}".format(self.x, self.y)
def __neg__(self):
return Point(-self.x, -self.y)
def __add__(self, point):
return Point(self.x+point.x, self.y+point.y)
def __sub__(self, point):
return self + -point
然后你可以做这样的事情:
>>> p1 = Point(1,1)
>>> p2 = Point(3,4)
>>> print p1 + p2
4, 5
您可以根据需要添加任意数量的其他操作。有关您可以实现的所有方法的列表,请参阅Python docs。
答案 1 :(得分:1)
取决于你想对坐标做什么,你也可以滥用complex数字:
import cmath
New_Row_Start_Coordinate = (0+2j) + (0+0j)
New_Row_End_Coordinate = New_Row_Start_Coordinate + (4+0j)
print New_Row_End_Coordinate.real
print New_Row_End_Coordinate.imag
答案 2 :(得分:0)
Python本身不支持列表上的元素操作;你可以通过列表推导或map
来做到这一点,但对于这个用例来说这有点笨拙。如果你做了很多这样的事情,我建议你看NumPy。
答案 3 :(得分:0)
对于a = (0,2)
和b = (0,0)
a + b
会产生(0, 2, 0, 0)
,这可能不是您想要的。我建议使用numpy
的{{1}}函数:http://docs.scipy.org/doc/numpy/reference/generated/numpy.add.html
参数:x1,x2:array_like
返回:x1和x2之和,按元素。 (...)