4

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

4 回答 4

6

听起来您正在寻找 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 文档

于 2014-05-29T18:58:15.873 回答
1

根据您要对坐标执行的操作,您还可以滥用复数

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
于 2014-05-29T18:49:13.273 回答
0

For a = (0,2) and b = (0,0) a + b will yield (0, 2, 0, 0), which is probably not what you want. I suggest to use numpy's add function: http://docs.scipy.org/doc/numpy/reference/generated/numpy.add.html

Parameters : x1, x2 : array_like

Returns: The sum of x1 and x2, element-wise. (...)

于 2014-05-29T18:42:11.127 回答
0

Python 本身不支持列表上的元素操作;你可以通过列表推导来做到这一点,或者map但这对于这个用例来说有点笨拙。如果您正在做很多此类事情,我建议您查看NumPy

于 2014-05-29T18:38:15.760 回答