Определить, пересекает ли линия, образованная между 2 точками, оси X или Y - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь сделать это назначение:

Напишите функцию Python крестиков (), чтобы определить, пересекается ли линия, образованная между 2 точками (x1, y1) и (x2, y2)ось x и / или y.

Функция запрашивает 4 значения - x1, y1, x2 и y2.Он выводит одно из следующих сообщений:

Line crosses both x and y axes
Line crosses x axis only
Line crosses y axis only
Line does not cross both x and y axes

Я читаю свои лекционные заметки, но не охватывает эту тему.Есть ли какая-нибудь формула, которую я могу использовать для расчета?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Проблема действительно в сегментах, а не в линиях: какая-то простая магия битов

def crossesaxes(x1,y1,x2,y2):
    q1 = (1 if x1 < 0 else 0) | (2 if y1 < 0 else 0)
    q2 = (1 if x2 < 0 else 0) | (2 if y2 < 0 else 0)
    q = q1 ^ q2
    answers = ['no crossing', 'x', 'y', 'crosses both']
    return answers[q]

(не указано, является ли сегмент с конечной точкой на оси intersects it)

0 голосов
/ 07 февраля 2019

Это должно быть довольно просто, так как вам нужно только проверить, пересекает ли она ось X или Y.Вы можете просто проверить, изменяется ли какой-либо из ваших x s или y s с положительного на отрицательный или с отрицательного на положительный.

def intersects_axis(v1, v2):
  return (v1 <= 0 <= v2 or v2 <= 0 <= v1)


def determine_intersections(x1, y1, x2, y2):

  print("Checking if {}, {} and {}, {} any axes".format(x1, y1, x2, y2))

  intersects_y = intersects_axis(y1, y2)
  intersects_x = intersects_axis(x1, x2)

  if intersects_y and intersects_x:
    print("Line crosses both x and y axes")
  elif intersects_y:
    print("Line crosses y axis only")
  elif intersects_x:
    print("Line crosses x axis only")
  else:
    print("Line does not cross both x and y axes")


if __name__ == "__main__":

  x1, y1 = 1, 1

  x2, y2 = 2, 2

  determine_intersections(x1, y1, x2, y2)

  x2, y2 = 1, -1

  determine_intersections(x1, y1, x2, y2)

  x2, y2 = -1, -1

  determine_intersections(x1, y1, x2, y2)

  x2, y2 = -1, 1

  determine_intersections(x1, y1, x2, y2)

Что даст вам:

Checking if 1, 1 and 2, 2 any axes
Line does not cross both x and y axes
Checking if 1, 1 and 1, -1 any axes
Line crosses y axis only
Checking if 1, 1 and -1, -1 any axes
Line crosses both x and y axes
Checking if 1, 1 and -1, 1 any axes
Line crosses x axis only
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...