2014-07-17 4 views
0

저는 거의 프로젝트를 마쳤으며 지난 몇 일 동안 연구하려고했던 나머지 하나의 문제가 있습니다. 나는 내 이미지를 회전시키고 수평으로 뒤집을 수 있었고 모든 도움 덕분에 이미지를 바꿀 수있었습니다. 하지만 내 나머지 문제는 기본적으로 사각형 충돌 감지 구성표를 사용하여 메신저 이후 이미지를 회전 한 후 어떻게 충돌 탐지합니까? 그것은 회전 한 직사각형 구성표가 작동하지 않는 것 같습니다 .... 덕분에 너무 많은 놈들!회전 된 이미지 및 충돌 감지

답변

1

separating axis theorem (SAT)의 경우 2 볼록를 결정하기위한 좋은 도구입니다 다각형은 교차하고 있습니다. 나는 나를 위해 작동 링크의 코드를 가져올 수 없습니다 인정해야하지만, 여기에 예제와 함께 SAT 스크립트에 대한 대안 링크입니다 : https://github.com/jriecken/sat-js/blob/master/SAT.js

내가 고려 사항이를 추가 할 수는 ...

분리 축에 관련된 수학은 모든 벡터를 교차 테스트해야하기 때문에 상당히 길다.

간단한 수학 사전 테스트를 사용하여 2 개의 특정 직사각형이 교차 할 수 있는지 여부를 사전 테스트하여 프로세스를보다 효율적으로 만들 수 있습니다.

두 개의 직사각형이 교차 할 가능성이 없다면 더 비싼 테스트를 거칠 필요가 없습니다.

사전 테스트 :

있는 2 개 RECT 센터 사이의 거리가 halfDiameters 다음 그 2 개의 구형이 가능하게 교차 할 수의 합보다 많은 경우는 ... 그래서하지 않습니다 그 2 개의 rect에서 더 비싼 수학 테스트. 어떤 사각형의 halfDiameter가 변경되지 않기 때문에

if(Math.abs(rect1.centerX-rect2.centerX) > rect1.halfDiameter+rect2.halfDiameter){ 

    // rect1 & rect2 can't be intersecting...don't bother testing further 

} 

if(Math.abs(rect1.centerY-rect2.centerY) > rect1.halfDiameter+rect2.halfDiameter){ 

    // rect1 & rect2 can't be intersecting...don't bother testing further 

} 

, 당신은 halfDiameter 저장된 각 사각형 및 재사용을 위해 한 번 계산할 수 있습니다.

rect1.halfDiameter=Math.sqrt(rect1.width*rect1.width+rect1.height*rect1.height)/2; 

rect2.halfDiameter=Math.sqrt(rect2.width*rect2.width+rect2.height*rect2.height)/2; 

rect.centerX 및 rect.centerY는 회전 된 사각형의 현재 중심입니다.