如何操作Python中的笛卡尔坐标?

时间:2014-05-29 18:34:05

标签: python coordinates cartesian-coordinates

我有一组基本的笛卡尔坐标,我想用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)

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之和,按元素。 (...)