2011-12-22 3 views
1

좋아,이 알고리즘은 공과 사용자가 iPad의 화면에서 그린 선 사이의 충돌을 감지해야합니다. 코드는 매우 간단합니다 :움직이는 공과 선 사이의 충돌

for (int i = 1; i < currentPlatform; i++) { 
     float x1 = xStart[i] -xBall; 
     float y1 = yStart[i] - yBall; 
     float x2 = xEnd[i] - xBall; 
     float y2 = yEnd[i] - yBall; 

     float dx = x2 - x1; 
     float dy = y2 - y1; 
     float dr = sqrtf(powf(dx, 2) + powf(dy, 2)); 
     float D = x1*y2 - x2*y1; 

     float delta = powf((ball.frame.size.height/2), 2)*powf(dr, 2) - powf(D, 2); 

     NSLog(@"%f", delta); 

     if (delta >= 0) { 
      iDir = (((ballVelocity*(sin(angle[i])))*-1)*kRestitution);//*sin(angle[i])); 
      jDir = (((ballVelocity*(cos(angle[i]))))*kRestitution*cos(angle[i])); 
     } 
    } 

문제는 공이 라인을 통과하지 못하는 것입니다! 그리고 델타가 인쇄 된 콘솔에서 4trillion 같은 미친 대답을합니다! 아무도 내가이 충돌 탐지에 잘못했다는 것을 알고 있습니까?

답변

0

지금 코드를 사용해 볼 시간이 없지만 사용자가 그리기 할 때마다 0.05 초마다 위치 표시를 추가하여 배열에 추가 한 다음 매번 볼을 추가 할 수 있습니다 이동하여 마커에 있는지 확인합니다.

또는 수학적으로 저장할 수있는 베 지어 커브 또는 다른 커브를 만든 다음 볼의 위치가 선의 수식을 만족하는지 확인할 수 있습니다.

+0

이 방법이 최선의 방법은 아니지만 다른 방법이 없다면 시도해보십시오. – Jordan