Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่าสามารถเข้าถึงเวกเตอร์ B ได้โดยการหมุนเวกเตอร์ A และเพิ่มเวกเตอร์ C ลงใน Python


สมมติว่าเรามีเวกเตอร์สามตัว x, y และ z ในระนาบ 2 มิติ เราต้องตรวจสอบว่าเราสามารถหาเวกเตอร์ y จากเวกเตอร์ x ได้หรือไม่โดยหมุนมัน 90 องศา (ตามเข็มนาฬิกา) หรือบวก z กับมันกี่ครั้งก็ได้ตามต้องการ

ดังนั้น หากอินพุตเป็น x =(-4, -2) y =(-1, 2) z =(-2, -1) ผลลัพธ์จะเป็น True เนื่องจากเราสามารถเพิ่ม z ด้วย x เพื่อรับตำแหน่ง (-2, -1) แล้วหมุน 90° ตามเข็มนาฬิกาเพื่อให้ได้ (-1, 2)

ตรวจสอบว่าสามารถเข้าถึงเวกเตอร์ B ได้โดยการหมุนเวกเตอร์ A และเพิ่มเวกเตอร์ C ลงใน Python

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

กำหนดฟังก์ชัน util() นี่จะใช้เวลา p, q, r, s

  • d :=r * r + s * s
  • ถ้า d เหมือนกับ 0 แล้ว
    • คืนค่า จริง เมื่อ p และ q ทั้งคู่เป็น 0 มิฉะนั้น เท็จ
  • คืนค่าเป็นจริงเมื่อ (p * r + q * s) และ (q * r - p * s) หารด้วย d ลงตัว ไม่เช่นนั้นเท็จ
  • จากวิธีหลัก ให้ทำดังนี้ -
  • ถ้ามี util(x ของ p - x ของ q, y ของ p - y ของ q, x ของ r, y ของ r) หรือ util(x ของ p + x ของ q, y ของ p + q[ 1], x ของ r, y ของ r) หรือ util(x ของ p - y ของ q, y ของ p + x ของ q, x ของ r, y ของ r) หรือ util(x ของ p + y ของ q, y ของ p - x ของ q, x ของ r, y ของ r) เป็นจริง จากนั้น
    • คืนค่า True
  • คืนค่าเท็จ

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

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))

อินพุต

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

ผลลัพธ์

True