2013-05-08 3 views
1

는 내가 보이는 다각형이있을 때 충돌 검출 기능의 영역을 정의에 대해 이동하는 방법을 모르는 것 같은 : 나는 채우기/스트로크 호출 이전에 lineTo() 몇 번을 이용하여 다각형을 그리원과 다각형 간의 Javascript 충돌 감지?

______ 
/_____| 
// 
// 
--- 

그래서 나는 모든 점의 x, y 좌표를 안다. 공 포인트의 특정 영역을 넘어 경우

현재 난 그냥 확인 : platformBottom는 '수평 라인의 Y 값이 될 것이다'최고 수평 라인 '에 대한 Y 값이 될 것이다

if(tmpParticle.y <= platformBottom) { 
     if(tmpParticle.x < leftPipe_middleX || tmpParticle.x > rightPipe_middleX) { 
      tmpParticle = particleCollision(tmpParticle, platformBottom); 
     } 
    } 

    if(tmpParticle.y <= pipeBottom && tmpParticle.y >= pipeBottom - 30) { 
     if(tmpParticle.x < leftPipe_bottomRightX && tmpParticle.x > leftPipe_bottomLeftX) { 
      tmpParticle = particleCollision(tmpParticle, pipeBottom); 
     } else if (tmpParticle.x < rightPipe_bottomRightX && tmpParticle.x > rightPipe_bottomLeftX) { 
      tmpParticle = particleCollision(tmpParticle, pipeBottom); 
     } 
    } 

platformHeight platformHeight 바로 아래에 ' rightPipe *는 예제와 같습니다. leftPipe *는 다른 방향을 제외하고 같은 폴리곤을위한 것입니다 (충돌없이 볼을 통과시켜야하는 파이프를 형성하기 위해).

내 particleCollision() 함수는 tmpParticle을 가져 와서 Y 값 (두 번째 매개 변수 즉 pipeBottom)을 기준으로 방향을 반전합니다. 나중에 그것을 향상시킬 필요가있을 수 있지만 지금은 잘 작동합니다.

충돌 영역을 정의하는 더 좋은 방법을 찾아야합니다.

답변

0

파이프를 삼각형으로 분할 한 다음 triangle - circle 교차 영역을 찾으십시오. 교차하는 경우 교차점은 항상 convex polygon (영역은 다시 삼각형으로 분할하여 계산하기 쉽습니다) 및 segment (면적도 계산하기 쉽습니다 - http://en.wikipedia.org/wiki/Circular_segment)입니다. 다른 경우는 원 안에 완전히 들어있는 경우 삼각형 자체입니다 (간단한 경우).

+0

파이프 부품 (기본적으로 한면으로 표제가 붙은 직사각형과 유사 함)의 경우, 4 포인트 (상단 모서리 + 중간 모서리 + 왼쪽 하단 + 오른쪽 하단)에 대한 좌표를 가져옵니다. 그것으로부터 두 개의 삼각형을 정의하는 것 (너무 어렵지 않아야 함) : 그러면 탐지를 위해 볼록 다각형 알고리즘을 사용합니까? – dan2k3k4

+0

예, 또한 여기를보세요 http://stackoverflow.com/questions/5518940/how-to-get-collision-detection-of-circle-and-triangle – Andrew