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

ตรวจสอบว่า Vector B ถึงได้จากการ Rotate Vector A และ Add Vector C ด้วย Python


มี Vector x, y, z ใน 2D ต้องเช็คว่า y ถึงได้จาก x โดย Rotate 90° CW หรือ Add z ซ้ำๆ

เช่น Input x = (-4, -2), y = (-1, 2), z = (-2, -1) Output True (x+z = (-6,-3) Rotate 90° -> (-1,2)? Wait: (-6,-3) rotate 90 CW = (-3,6)? ตัวอย่างอาจมีรายละเอียดต่างออกไป แต่โค้ดใช้ Algebra)

ตรวจสอบว่า Vector B ถึงได้จากการ Rotate Vector A และ Add Vector C ด้วย Python

ขั้นตอนแก้ (Algebraic):

  • ฟังก์ชัน util(p,q,r,s): d = r^2+s^2; ถ้า d==0 return p==0 and q==0; Return (p*r+q*s)%d==0 and (q*r-p*s)%d==0
  • Main: ลอง 4 รูปแบบ Rotation ของ y ต่อ x แล้วเช็ค util

ตัวอย่างโค้ด

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

Input

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

Output

True