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

두 개의 구를 확인하는 프로그램은 Python의 3D 공간에서 가속하여 만날 수 있는지 여부

<시간/>

반지름 값이 r1과 r2인 두 개의 구가 있다고 가정합니다. (x1, y1, z1) 및 (x2, y2, z2) 좌표에 있습니다. 그리고 가속도 값은 (ax1, ay1, az1) 및 (ax2, ay2, az2)와 같이 지정됩니다. 이 두 구가 주어진 가속도로 움직이면 3D 공간에서 만날 수 있는지 확인해야 합니다.

따라서 입력이 r1 =1 r2 =2 pos1 =(0, 0, 0) acc1 =(100,0,0) pos2 =(4, 0, 0) acc2 =(0,0,0)과 같으면 두 번째 구에는 가속도가 없으므로 이동하지 않지만 첫 번째 구는 x 방향으로 이동하여 충돌하므로 출력은 True가 됩니다.

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

  • 픽셀:=pos1[0] - pos2[0]
  • 파이 :=pos1[1] - pos2[1]
  • pz :=pos1[2] - pos2[2]
  • ax :=acc1[0] - acc2[0]
  • ay :=acc1[1] - acc2[1]
  • az :=acc1[2] - acc2[2]
  • da :=도끼 * 도끼 + 에이 * 에이 + az * az
  • dp :=px * px + py * py + pz * pz
  • co :=ax * px + y * py + az * pz
  • x :=0.0
  • da가 0과 같지 않으면
    • x :=- 공동 / 다
  • x :=최대 x, 0
  • dis :=(da * x * x + 2 * co * x + dp)의 제곱근
  • dis −=r1 + r2이면
    • 참 반환
  • 그렇지 않으면 False를 반환

예시

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

def solve(r1, r2, pos1, acc1, pos2, acc2):
   px, py, pz = pos1[0] - pos2[0], pos1[1] - pos2[1], pos1[2] - pos2[2]
   ax, ay, az = acc1[0] - acc2[0], acc1[1] - acc2[1], acc1[2] - acc2[2]
   da = (ax * ax + ay * ay + az * az)
   dp = (px * px + py * py + pz * pz)
   co = (ax * px + ay * py + az * pz)

   x = 0.0
   if da != 0:
      x = - co / da
   x = max(x, 0)
   dis = (da * x * x + 2 * co * x + dp) ** 0.5
   if dis <= r1 + r2:
      return True
   else:
      return False

r1 = 1
r2 = 2
pos1 = (0, 0, 0)
acc1 = (100,0,0)
pos2 = (4, 0, 0)
acc2 = (0,0,0)
print(solve(r1, r2, pos1, acc1, pos2, acc2))

입력

1, 2, (0, 0, 0), (100,0,0), (4, 0, 0), (0,0,0)

출력

False