Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 벡터 A를 회전하고 벡터 C를 추가하여 벡터 B에 도달할 수 있는지 확인합니다.

<시간/>

2D 평면에 세 개의 벡터 x, y 및 z가 있다고 가정합니다. 필요에 따라 벡터 x를 90도(시계 방향) 회전하거나 z를 추가하여 벡터 x에서 벡터 y를 얻을 수 있는지 확인해야 합니다.

따라서 입력이 x =(-4, -2) y =(-1, 2) z =(-2, -1)과 같으면 위치를 얻기 위해 x에 z를 더할 수 있으므로 출력은 True가 됩니다. (-2, -1), 시계 방향으로 90° 회전하여 (-1, 2)를 얻습니다.

Python에서 벡터 A를 회전하고 벡터 C를 추가하여 벡터 B에 도달할 수 있는지 확인합니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

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(p의 x - q의 x, p의 y - q의 x, r의 x, r의 y) 또는 util(p의 x + q의 x, p의 y + q[ 1], r의 x, r의 y) 또는 util(p의 x - q의 y, p의 y + q의 x, r의 x, r의 y) 또는 util(p의 x + q의 y, y p - q의 x, r의 x, r의 y)가 참이면
    • 참 반환
  • 거짓을 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

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