2010-07-02 3 views
3

iPhone 및 대상 작업 C.다른 서클에서 원을 반사

나는 게임을하고 있으며 원을 벗어난 공을 정확하게 반영해야합니다. 나는 선과 원 교차로로서 그것을하려고 노력하고있다. 나는 서클 바깥 쪽에서 공 위치를 잡고 다음 드로 업데이트에서 서클 내부에있는 새로운 공 위치를가집니다. 나는 선 (공 경로)과 원의 교점을 안다. 이제 교차점을 중심으로 볼 패스의 끝점을 회전시켜 접선에서 올바른 반사 각도를 얻고 싶습니다.

공지되어 다음

  • 공 현재의 X, Y
  • 볼 엔드 X, Y
  • 볼 반경
  • 원 중심의 X, Y
  • 원 반경
  • 교차로 볼 패스 및 원의 포인트 x 및 y

나는 접선과 볼의 경로 사이에 입사각을 찾아야한다. 이것은 내 반사각과도 같을 것이다. 나는이 두 각도를 알게되면 회전 각도를 얻기 위해 180에서 이들을 뺄 수 있다고 생각합니다. 그런 다음 교차 각도에 대한 내 끝점을 그 양만큼 회전시킵니다. 나는 방법을 모른다.

답변

3

먼저 반사 또는 바운스가 있음을 나타 내기 위해 공의 중심이 원 안에있을 필요는 없습니다. 볼 중심과 원 사이의 거리가 볼 반경보다 작 으면 바운스가 발생합니다.

원의 반경이 R과 공의 반경은 원 반경 R + R이있는 경우로 변환하는 경우 는 R, 일을 단순화하고 볼 반경 0이있는 경우 충돌 감지 및 반향/튀어 오르기를 위해 이것은 동일합니다.

는 (확대) 원과 공의 경로 사이의 교점을 가지고 있으면, 쉽게 그 때의 원의 법선 N을 계산할 수는 (그것의 중심에서 방향의 단위 벡터이며 충돌 지점까지 원). 수신 벡터 V 반사 벡터, V -2 (NV) N이기

어디에 ( NV)의 내적이다. 이 문제의 경우 들어오는 벡터 V은 교차점에서 원 안에있는 점까지의 벡터입니다.

위의 반사 공식은 벡터 수학을 사용하여 비교적 쉽게 파생되지만 "calculate reflection vector"과 같은 Google 검색어도 사용할 수 있습니다. 수식의 기호는 VN의 가정 된 지침에 따라 달라집니다. Mathworld has a derivation 비록 표시된 바와 같이 기호가 다릅니다.

0

나는 지오 메트릭 부분에 대한 해결책만을 알고 있습니다.
하자 : 피타고라스의 정리를 사용하여 볼을 원

당신은 두 원 사이의 거리를 계산할 수의
r2 => 반경의
r1 => 반경입니다.
거리가 r1 + r2보다 작 으면 충돌을 수행하십시오.

충돌의 경우, 나는 Here을 참조 할 것입니다. 그것은 파이썬이지만, 나는 그것이 당신에게 무엇을 해야할지에 대한 아이디어를 줄 것이라고 생각합니다. Objective C의 튜토리얼 PeterCollingRidge으로 구현하기를 바란다.