2010-05-16 6 views
4

나는 현재 Breakout과 같은 게임을 작성 중이고 나는 어떻게 공을 표면에서 바운스 할 수 있는지 궁금해하고 있었다. 너무 잘 작동하지 않았다표면에서 공을 튀어 오름

[vx, vy] -> [-vy, vx] 

어떤 (당연히) :

나는이었다 90도 속도를 회전의 순진한 방법으로 갔다. 볼의 위치와 속도뿐만 아니라 공이 튕기는 지점도 알면 어떻게 그 점을 벗어날 수 있습니까?

제약 : 나는 정수 수학을 사용하고

  • (어디 없음 FP )
  • 내 모든 표면은 간단 평면 (수직, 수평, 또는 블록)
  • 있습니다 나는 단지 90도 각도로 튀어 나오고 싶다
  • 모든 충돌은 완전히 탄력적이다 (이것은 브레이크 아웃이다 - 마찰 등은 필요 없다)

언어 별 코드가 필요하지 않습니다. 누구든지 제대로 작동하는 방법에 대한 작은, 수학 공식을 제공 할 수 있다면 나를 위해 잘 작동합니다.

감사합니다.

+0

180도 속도 회전을 [VX , vy] -> [-vx, -vy]'. 이제 90도 회전합니다. – kennytm

+0

실수로 180 도가 아닌 90도를 써야했습니다. –

+1

적절한 브레이크 아웃을 위해서는 박쥐에서 공으로 이동해야합니다. –

답변

4

접촉점에서 법선 벡터를 계산해야합니다. 법선을 따르는 속도의 성분은 법선에 수직 인 속도의 성분이 동일하게 유지되는 동안 방향을 전환 할 것입니다.

수평/수직 표면의 경우 보통을 계산하기 쉽습니다. 더 복잡한 표면의 경우 표면 등식에 따라 달라질 수 있습니다.

또한 공의 에너지는 변하지 않는다고 가정합니다. 마찰/열 손실/공 등의 회전을 고려하면 복잡해질 수 있습니다.

+1

감사합니다. 이것은 내 문제를 해결했다. 나는 무엇이든 작동하는 통일 바운스 (bounce) 기능을 만들려고 했으므로 아무 표면 (블록, 벽, 외륜)에 대해서도 접촉 지점에서 호출 할 수있었습니다. –

5

수직 또는 수평 표면에서만 튀어 오를 것으로 가정하면 X 또는 Y 방향의 속도를 각각 무시할 수 있습니다.

[vx, vy]가 있고 수직 벽에서 튀어 나오면 [-vx, vy]가됩니다.

[vx, vy]가 있고 가로 벽에서 튀어 나오면 [vx, -vy]가됩니다.

+0

수직 벽인지 수평 벽인지 어떻게 알 수 있습니까? – apscience

5

저는 가로 벽에는 [vx, vy] -> [vx, -vy], 세로 벽에는 [vx, vy] -> [-vx, vy]를 사용하려고합니다.

3

영향을받는 지점에서 표면에 수직 인 선 주위로 벡터를 반사하고 있습니다. 2D :

exit_angle = 180 - impact_angle.

1

공의 속도와 표면을 알아야합니다. 예를 들어 x 축 [vx, vy]에 평행 한 선에서 튀어 오르는 것은 [vx, -vy]가됩니다. 선이 y 축과 평행하다면 [vx, vy]는 [-vx, vy]가됩니다. 선이 어느 축과도 평행이 아니지만 표면의 방향성 (x, y 축에 대해 (1, 0) 및 (0, 1))을 따라 속도의 간단한 반사를 찾고 있다면 더 복잡합니다.

0

축 정렬 된 상자로부터의 90도 반사는 X/Y 속도 기호를 적절하게 반전시키는 문제입니다. 그 외에도, 그것은 내적 (dot product)과 약간의 벡터 트위들 링을 필요로하지만, 수학은 여전히 ​​매우 안전합니다. 필요하다면 고정 점으로 쉽게 할 수 있습니다.

+0

이것이 사실이며 OP의 질문에 정확하게 답변하는 동안, 이것은 OP가 실제로 원하는만큼 정확하지 않습니다. 벽에 수직으로 움직이는 공 그림. 그 공이 "튀어 오르다"는 것을 원하지 않을 것이고 벽과 평행하게 움직이기 시작할 것입니다. –

3

충돌시 에너지가 손실되지 않는다고 가정하면 속도가 (vx, vy)로 이동하는 볼은 수직면에서 튀어 난 후 속도 (-vx, vy)로 이동하고, 수직면에서 튀어 나온 후 (vx, -vy) 이동합니다 수평 표면. 일반적인 경우에 대해

는 계산 부에서이 위키 문서 참조 (여전히 비록 어떠한 에너지 손실이 없다고 가정하고, 임의의 법선 벡터와 평면에서 거부) '될 http://en.wikipedia.org/wiki/Specular_reflection

관련 문제