2012-11-08 5 views
1

2 개의 10 미터 반경 원을 가지고 있고 더 큰 원마다 5 미터 반경 원을 5 축으로 z 축 방향으로 넣기를 원합니다. 큰 원과 작은 원이 임의로 이동하기를 원합니다. 큰 원은 충돌 할 수 있어야하며 작은 원은 충돌 할 수 있어야합니다.2 차원 동적 오브젝트를 z 축 방향으로 효율적으로 쌓는 방법

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? Java를 사용 하긴하지만 알고리즘/의사 코드가 좋을 것입니다.

보다 구체적으로; 큰 원의 가속 및 회전 이동을 작은 원에 효율적으로 전송하면서 모든 원을 동적으로 이동할 수있게하려면 어떻게해야합니까? 필자가 보았던 해결책은 큰 서클보다 더 복잡한 오브젝트에 대해 생각하기 시작했을 때 특히 다루기 힘들었던 경향이있었습니다.하지만 그럴 수도 있습니다.

+0

그래서 물리적 인 시스템을 모델링하려고합니다. 예를 들어 "이 페니를 선회하고있는이 레코드 플레이어에 놓은 다음 페니 위에 동전을 놓습니다"와 같은 물리적 시스템을 모델링하려고합니다. 이 "디스크"는 축 (기어 샤프트처럼)을 공유합니까? 겹칠 수 있습니까? 충돌은 비행기에서만 발생합니까? 그것들은 무겁고 정말로 2D입니까? 아니면 약간의 두께가 있습니까? – Mikeb

+0

큰 원이 돌고 있으면 작은 원이 더 큰 원의 중심을 중심으로 회전해야합니다. 작은 원은 큰 원을 "중첩"하지만 큰 원은 서로 겹치지 않아야하며 작은 원은 서로 중첩되어서는 안됩니다. 기술적으로 질량과 두께가 있습니다. 큰 서클을 "보트"로, 작은 서클을 "선원"(위에서 아래로)으로 생각할 수 있습니다. 나는 원심력에 대해서 너무 걱정하지 않는다. –

답변

0

소리가 들리면 약간의 수학 만하면됩니다.

x1, y1을 중심으로 반경이 r1 인 "보트"가 있다고 가정 해 보겠습니다. "선원"은 반경이 r2 인 x2, y2에 있으며 x2 y2는 보트 경계 안에 있습니다. 보트가 약간의 각도 A로 회전하고 선원이 단순히이 회전 프레임과 함께 움직이는 경우 선원의 새로운 중심 위치가 바로 같은 각도로 회전합니다. 그 라운드 원 (선원)이 몇 가지 방향을 가지고 있다면

a1 = x2 - x1; //difference between centers, x direction 
b1 = y2 - y1; //in y direction 
a2 = a1*cos(A) + b1*sin(A); //new difference in x direction 
b2 = b1*cos(A) - a1*sin(A); //new difference in y direction 

x3 = x1 + a2; //new center position of sailor, x direction 
y3 = y1 + b2; //        y direction 

, 그것은뿐만 아니라에 의해 회전 할 것이다 - 보트에서 반경 벡터로 정렬 된 선원에 대한 방향을 생각한다. 새로운 위치에서, 보트가 어떤 각도 A로 회전 한 후에,이 방향 또한 A로 회전하기 때문에, 우리는 선원에게 그 회전을 적용해야합니다. 선원이 단지 기능이없는 원이면 모든 방향이 동일하므로 건너 뛸 수 있습니다.

+0

그래서 선원 모자에 쥐가 있다는 말로 이걸 확장하고 싶다면 선원과 x1, y1 및 x2, y2 및 A와 같은 공식을 다시 실행해야합니다. 선원의 각도? –

+0

마우스가 실제로 두 번 회전하고 있기 때문에 (보트가 돌아가고, 선원이 .. 활을 움직입니다.) 두 변형을 모두 작성해야합니다. "세계"참조 프레임이 있다고 가정 해보십시오. 하나의 변형은 세계 원점에서 보트로 이동합니다. 두 번째는 보트에서 선원 등으로 이동합니다. 따라서 모든 부모 변환을 해결해야 마우스의 위치를 ​​알 수 있습니다. 모든 것이 원이면 원통형 좌표 (반경, 각도)가 더 좋을 수도 있습니다. – Mikeb

+0

. 알고리즘이 얼마나 단순한 지 놀라 울뿐입니다. 나는 부모의 몸의 회전에 의해 생성 된 호를 따라 움직이는 물체를 얻을 수 없었다. (나는 할 수 있었다. 그러나 그것은 아주 못생긴 해킹이었다). 그리고 시간이 지남에 따라 나는 삼각법에 능숙했습니다. 가난한 선생님이 지금 나를 볼 수 있다면 오. 감사합니다. . 내가 이것을 효과적으로 구현할 수 있는지 알게 될 것이다. –