Computer >> Máy Tính >  >> Lập trình >> Python

Kiểm tra xem có thể tiếp cận vectơ B hay không bằng cách xoay vectơ A và thêm vectơ C vào của nó bằng Python

Giả sử chúng ta có ba vectơ x, y và z trong mặt phẳng 2D. Chúng ta phải kiểm tra xem chúng ta có thể lấy vectơ y từ vectơ x hay không bằng cách xoay nó 90 độ (theo chiều kim đồng hồ) hoặc thêm z với nó bất kỳ số lần nào theo yêu cầu.

Vì vậy, nếu đầu vào là x =(-4, -2) y =(-1, 2) z =(-2, -1), thì đầu ra sẽ là True vì chúng ta có thể thêm z với x để có được vị trí (-2, -1), sau đó xoay 90 ° theo chiều kim đồng hồ để lấy (-1, 2).

Kiểm tra xem có thể tiếp cận vectơ B hay không bằng cách xoay vectơ A và thêm vectơ C vào của nó bằng Python

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

Định nghĩa một hàm dùng (). Điều này sẽ mất p, q, r, s

  • d:=r * r + s * s
  • nếu d giống 0, thì
    • trả về true khi cả p và q đều bằng 0, ngược lại là false
  • trả về true khi (p * r + q * s) và (q * r - p * s) đều chia hết cho d, ngược lại là false
  • Từ phương thức chính, hãy làm như sau -
  • nếu bất kỳ một trong số ut (x của p - x của q, y của p - y của q, x của r, y của r) hoặc ut (x của p + x của q, y của p + q [ 1], x của r, y của r) hoặc use (x của p - y của q, y của p + x của q, x của r, y của r) hoặc use (x của p + y của q, y của p - x của q, x của r, y của r) là đúng, thì
    • trả về True
  • trả về Sai

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

def util(p, q, r, s):
   d = r * r + s * s
   if d == 0:
      return p == 0 and q == 0
   return (p * r + q * s) % d == 0 and (q * r - p * s) % d == 0
def solve(p,q,r):
   if util(p[0] - q[0], p[1] - q[1], r[0], r[1]) or util(p[0] + q[0], p[1] + q[1], r[0], r[1]) or util(p[0] - q[1], p[1] + q[0], r[0], r[1]) or util(p[0] + q[1], p[1] - q[0], r[0], r[1]):
      return True
   return False
p = (-4, -2)
q = (-1, 2)
r = (-2, -1)
print(solve(p, q, r))

Đầu vào

(-4, -2), (-1, 2), (-2, -1)

Đầu ra

True