Как я могу манипулировать декартовыми координатами в Python?

У меня есть набор основных декартовых координат, и я хотел бы манипулировать ими с помощью 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)

person Alligator    schedule 29.05.2014    source источник
comment
Я хотел бы найти строку — извините, я не понимаю. Что значит найти строку? Ты уже знаешь координаты, не так ли?   -  person Pavel    schedule 29.05.2014
comment
Я просто хотел определить строку для дальнейшей обработки. Например, я могу захотеть найти точку в n-й строке вверх от начала координат.   -  person Alligator    schedule 29.05.2014


Ответы (4)


Похоже, вы ищете класс 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. документы.

person whereswalden    schedule 29.05.2014

в зависимости от того, что вы хотите сделать с координатами, вы также можете неправильно использовать 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
person Pavel    schedule 29.05.2014

Python изначально не поддерживает поэлементные операции над списками; вы можете сделать это с помощью списков или map, но это немного неуклюже для этого варианта использования. Если вы часто делаете подобные вещи, я бы посоветовал обратить внимание на NumPy.

person tzaman    schedule 29.05.2014

Для a = (0,2) и b = (0,0) a + b даст (0, 2, 0, 0), что, вероятно, не то, что вам нужно. Я предлагаю использовать функцию add numpy: http://docs.scipy.org/doc/numpy/reference/generated/numpy.add.html

Параметры: x1, x2: array_like

Возвраты: Сумма x1 и x2, поэлементно. (...)

person timgeb    schedule 29.05.2014