【问题标题】:How can I manipulate cartesian coordinates in Python?如何在 Python 中操作笛卡尔坐标?
【发布时间】:2014-05-30 02:58:15
【问题描述】:

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

【问题讨论】:

  • “我希望能够找到一行” - 抱歉,我不明白。找到一行是什么意思?你已经知道坐标了,不是吗?
  • 我只是想确定一行以进行进一步处理。例如,我可能想从原点向上的第 n 行找到一个点。

标签: python coordinates cartesian-coordinates


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    根据你想对坐标做什么,你也可以滥用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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        对于a = (0,2)b = (0,0) a + b 将产生(0, 2, 0, 0),这可能不是您想要的。我建议使用numpyadd函数:http://docs.scipy.org/doc/numpy/reference/generated/numpy.add.html

        参数:x1,x2:array_like

        返回:x1 和 x2 之和,按元素计算。 (...)

        【讨论】:

          猜你喜欢
          • 2013-08-19
          • 2012-04-13
          • 1970-01-01
          • 2021-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-16
          相关资源
          最近更新 更多