檢查是否可以透過在 Python 中旋轉向量 A 並新增向量 C 來到達向量 B
假設我們在二維平面上有三個向量 x、y 和 z。我們必須檢查是否可以透過將向量 x 旋轉 90 度(順時針)或根據需要多次新增向量 z 來從向量 x 獲取向量 y。
因此,如果輸入類似於 x = (-4, -2) y = (-1, 2) z = (-2, -1),則輸出將為 True,因為我們可以將 z 與 x 相加得到位置 (-2, -1),然後順時針旋轉 90° 得到 (-1, 2)。
要解決此問題,我們將遵循以下步驟:
定義一個函式 util()。這將接收 p、q、r、s
- d := r * r + s * s
- 如果 d 等於 0,則
- 當 p 和 q 都為 0 時返回 true,否則返回 false
- 當 (p * r + q * s) 和 (q * r - p * s) 都能被 d 整除時返回 true,否則返回 false
- 從主方法執行以下操作:
- 如果 util(x of p - x of q, y of p - y of q, x of r, y of r) 或 util(x of p + x of q, y of p + q[1], x of r, y of r) 或 util(x of p - y of q, y of p + x of q, x of r, y of r) 或 util(x of p + y of q, y of p - x of q, x of r, y of r) 中的任何一個為 true,則
- 返回 True
- 返回 False
示例
讓我們檢視以下實現以更好地理解:
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
廣告