풀 게임에서 볼의 방향과 속도를 계산하는 알고리즘을 찾고 있습니다. 풀 게임은 내가 기억할 수있는 가장 오래된 컴퓨터 게임이기 때문에 이것에 대한 오픈 소스 코드 유형이 있어야합니다.
한 볼이 다른 볼을 칠 때 두 볼의 방향을 계산하는 알고리즘이 필요합니다. 서로 충돌하는 정확한 각도와 속도에 따라 다릅니다.
Java 코딩을 연습하고 싶기 때문에 이러한 유형의 코드가있는 Java 코드 또는 패키지를 찾고 있습니다.
풀 게임에서 볼의 방향과 속도를 계산하는 알고리즘을 찾고 있습니다. 풀 게임은 내가 기억할 수있는 가장 오래된 컴퓨터 게임이기 때문에 이것에 대한 오픈 소스 코드 유형이 있어야합니다.
한 볼이 다른 볼을 칠 때 두 볼의 방향을 계산하는 알고리즘이 필요합니다. 서로 충돌하는 정확한 각도와 속도에 따라 다릅니다.
Java 코딩을 연습하고 싶기 때문에 이러한 유형의 코드가있는 Java 코드 또는 패키지를 찾고 있습니다.
답변:
기본 구면 충돌 감지 / 응답은 매우 간단하지만 스핀을 처리해야하므로 좋은 풀 시뮬레이션을 위해 충분히 정확하게 수행하는 것이 더 까다로울 수 있습니다.
물리 엔진의 존재를 알고 있습니까? 몇 가지 인기있는 예는 이것입니다 (그리고 그들은 풀 공 충돌보다 많은 것을 할 수 있습니다). 아마도 풀 게임을 만들기에 좋은 선택이지만 Java를 배우기에는 그리 좋지 않습니다 ...
2D에서
Box2D : http://www.box2d.org
다람쥐 : http://code.google.com/p/chipmunk-physics/
3D에서
글 머리 기호 : http://bulletphysics.org/
ODE : http://www.ode.org
큰 예산의 상용 게임을 만드는 경우 :
하복 : http://www.havok.com
"자신의 롤"경로를 선택하면 " 풀 홀 레슨 : 원 또는 구 간 빠르고 정확한 충돌 감지 "기사에 관심이 있을 수 있습니다. Java에 국한된 것은 아니지만 간단한 시뮬레이션과 관련된 일부 알고리즘에 대해 설명합니다.
스핀이 모델링되지 않은 간단한 풀 게임의 경우 알고리즘이 매우 간단합니다.
의사 코드에서 이것은 다음과 같습니다.
vector difference = ball2.position - ball1.position
float distance = sqrt(difference)
if (distance < ball1.radius + ball2.radius) {
vector normal = difference / distance
//vector velocityDelta = ball2.velocity - ball1.velocity
vector velocityDelta = ball1.velocity - ball2.velocity
float dot = dotProduct(velocityDelta, normal)
if (dot > 0) {
float coefficient = 0.5
float impulseStrength = (1 + coefficient) * dot * (1 / ball1.mass + 1 / ball2.mass)
vector impulse = impulseStrength * normal
ball1.velocity -= impulse / ball1.mass
ball2.velocity += impulse / ball2.mass
}
}
모든 공의 질량이 동일하고 풀 게임의 모든 공에 대해 일정한 반지름을 가정하는 경우 알고리즘에서 질량을 생략 할 수 있지만 코드는 이러한 단순화없이 더 유용합니다.
코드는 이 자습서를 기반으로 하지만 임펄스 곱셈이 잘못되었음을 기억합니다.