检查是否可以通过在 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
广告